Le fichier PHP récupère le contenu () et définit les en-têtes de requête
Avec PHP, est-il possible d'envoyer des en-têtes HTTP avec file_get_contents()
?
Je sais que vous pouvez envoyer l'agent utilisateur à partir de votre fichier php.ini
. Cependant, vous pouvez également envoyer d'autres informations telles que HTTP_ACCEPT
, HTTP_ACCEPT_LANGUAGE
, et HTTP_CONNECTION
avec file_get_contents()
?
Ou y a-t-il une autre fonction qui accomplira cela?
7 réponses
En fait, après une lecture plus approfondie sur la fonction file_get_contents()
:
// Create a stream
$opts = [
"http" => [
"method" => "GET",
"header" => "Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
]
];
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents('http://www.example.com/', false, $context);
Vous pourriez être en mesure de suivre ce modèle pour réaliser ce que vous cherchez à, je n'ai pas personnellement testé cela cependant. (et si cela ne fonctionne pas, n'hésitez pas à consulter mon autre réponse)
Voici ce qui a fonctionné pour moi (Dominic était juste une ligne courte).
$url = "";
$options = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n" . // check function.stream-context-create on php.net
"User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n" // i.e. An iPad
)
);
$context = stream_context_create($options);
$file = file_get_contents($url, false, $context);
Vous pouvez utiliser cette variable pour récupérer les en-têtes de réponse après la fonction file_get_contents()
.
Code:
file_get_contents("http://example.com");
var_dump($http_response_header);
Sortie:
array(9) {
[0]=>
string(15) "HTTP/1.1 200 OK"
[1]=>
string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT"
[2]=>
string(29) "Server: Apache/2.2.3 (CentOS)"
[3]=>
string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT"
[4]=>
string(27) "ETag: "280100-1b6-80bfd280""
[5]=>
string(20) "Accept-Ranges: bytes"
[6]=>
string(19) "Content-Length: 438"
[7]=>
string(17) "Connection: close"
[8]=>
string(38) "Content-Type: text/html; charset=UTF-8"
}
L'utilisation des bibliothèques PHP cURL sera probablement la bonne solution, car cette bibliothèque a plus de fonctionnalités que le simple file_get_contents(...)
.
Un exemple:
<?php
$ch = curl_init();
$headers = array('HTTP_ACCEPT: Something', 'HTTP_ACCEPT_LANGUAGE: fr, en, da, nl', 'HTTP_CONNECTION: Something');
curl_setopt($ch, CURLOPT_URL, "http://localhost"); # URL to post to
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); # return into a variable
curl_setopt($ch, CURLOPT_HTTPHEADER, $header ); # custom headers, see above
$result = curl_exec( $ch ); # run!
curl_close($ch);
?>
Oui.
Lors de l'appel de file_get_contents sur une url, il faut utiliser la fonction stream_create_context, qui est assez bien documentée sur php.net
Ceci est plus ou moins exactement couvert sur la page suivante à php.net dans la section Commentaires de l'utilisateur: http://php.net/manual/en/function.stream-context-create.php
Malheureusement, il ne semble pas que file_get_contents()
offre vraiment ce degré de contrôle. L'extension cURL est généralement la première à apparaître, mais je recommande fortement L'extension PECL_HTTP ( http://pecl.php.net/package/pecl_http ) pour des requêtes HTTP très simples et directes. (il est beaucoup plus facile de travailler avec que cURL)