web-dev-qa-db-fra.com

Comment publier des données dans PHP en utilisant file_get_contents?

J'utilise la fonction file_get_contents() de PHP pour récupérer le contenu d'une URL, puis je traite les en-têtes via la variable $http_response_header.

Maintenant, le problème est que certaines des URL nécessitent la publication de certaines données (par exemple, des pages de connexion).

Comment je fais ça?

Je me rends compte que j'utilise stream_context, mais je ne suis pas tout à fait clair.

Merci.

279
Paras Chopra

Envoyer une demande HTTP POST à l'aide de file_get_contents n'est pas si difficile, en fait: comme vous l'avez deviné, vous devez utiliser le paramètre _$context_.


Un exemple est donné dans le manuel PHP, sur cette page: options de contexte HTTP (citant) :

_$postdata = http_build_query(
    array(
        'var1' => 'some content',
        'var2' => 'doh'
    )
);

$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-Type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);

$context  = stream_context_create($opts);

$result = file_get_contents('http://example.com/submit.php', false, $context);
_

Fondamentalement, vous devez créer un flux, avec les bonnes options (il y a une liste complète sur cette page) , et l'utiliser comme troisième paramètre. _file_get_contents_ - rien de plus ;-)


En règle générale, pour envoyer des requêtes HTTP POST, nous avons tendance à utiliser curl, qui offre de nombreuses options, mais les flux sont l’un des avantages de PHP dont personne ne sait rien ... dommage ...

566
Pascal MARTIN

Une alternative, vous pouvez aussi utiliser fopen

$params = array('http' => array(
    'method' => 'POST',
    'content' => 'toto=1&tata=2'
));

$ctx = stream_context_create($params);
$fp = @fopen($sUrl, 'rb', false, $ctx);
if (!$fp)
{
    throw new Exception("Problem with $sUrl, $php_errormsg");
}

$response = @stream_get_contents($fp);
if ($response === false) 
{
    throw new Exception("Problem reading data from $sUrl, $php_errormsg");
}
19
Macbric
$sUrl = 'http://www.linktopage.com/login/';
$params = array('http' => array(
    'method'  => 'POST',
    'content' => 'username=admin195&password=d123456789'
));

$ctx = stream_context_create($params);
$fp = @fopen($sUrl, 'rb', false, $ctx);
if(!$fp) {
    throw new Exception("Problem with $sUrl, $php_errormsg");
}

$response = @stream_get_contents($fp);
if($response === false) {
    throw new Exception("Problem reading data from $sUrl, $php_errormsg");
}
0
user2525449