it-swarm.com.de

PHP file_get_contents () und Setzen von Request Headern

Kann man mit PHP HTTP-Header mit file_get_contents() senden?

Ich weiß, dass Sie den Benutzeragenten aus Ihrer php.ini - Datei senden können. Können Sie jedoch auch andere Informationen wie HTTP_ACCEPT, HTTP_ACCEPT_LANGUAGE Und HTTP_CONNECTION Mit file_get_contents() senden?

Oder gibt es eine andere Funktion, die dies bewirkt?

111
Marcus

Bei weiterer Lektüre der file_get_contents() -Funktion:

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

Möglicherweise können Sie diesem Muster folgen, um das zu erreichen, wonach Sie suchen. Ich habe dies jedoch nicht persönlich getestet. (und wenn es nicht klappt, schau dir meine andere Antwort an)

291
Dominic Barnes

Hier ist, was für mich funktioniert hat (Dominic war nur eine Zeile zu kurz).

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

Mit dieser Variablen können Sie Antwortheader nach der Funktion file_get_contents() abrufen.

Code:

  file_get_contents("http://example.com");
  var_dump($http_response_header);

Ausgabe:

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

Die Verwendung der PHP-CURL-Bibliotheken ist wahrscheinlich der richtige Weg, da diese Bibliothek mehr Funktionen als die einfache Funktion file_get_contents(...) bietet.

Ein Beispiel:

<?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);
?>
0
phidah

Ja.

Wenn Sie file_get_contents über eine URL aufrufen, sollten Sie die Funktion stream_create_context verwenden, die auf php.net ziemlich gut dokumentiert ist

Dies wird mehr oder weniger genau auf der folgenden Seite bei php.net im Bereich Benutzerkommentare behandelt: http://php.net/manual/en/function.stream-context-create.php

0
Laereom