132 votes

PHP file_get_contents () et en-têtes

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. Toutefois, pouvez-vous é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 ceci?

343voto

Dominic Barnes Points 13815

En fait, après avoir lu la fonction file_get_contents() :

 <?php
// Create a stream
$opts = array(
  'http'=>array(
    '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 pourrez peut-être suivre ce modèle pour réaliser ce que vous cherchez, mais je ne l'ai pas personnellement testé. (et si cela ne fonctionne pas, n'hésitez pas à consulter mon autre réponse)

98voto

Fabrice Points 261

Deux ans et pas de réponse exacte ... même si Dominic n'avait qu'une ligne.

 $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);
 

40voto

ali_sed Points 89

Vous pouvez utiliser cette variable après la fonction file_get_content() .

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"
}
 

0voto

phidah Points 2602

Utiliser les bibliothèques php cURL sera probablement le bon choix 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);
?>
 

-4voto

Dominic Barnes Points 13815

Malheureusement, il ne semble pas que file_get_contents() offre réellement ce degré de contrôle. L’extension cURL est généralement la première à apparaître, mais je recommande vivement l’extension PECL_HTTP (http://pecl.php.net/package/pecl_http) pour les requêtes HTTP très simples et directes. (il est beaucoup plus facile de travailler que cURL)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X