version - PHP file_get_contents () und Setze Anforderungsheader





w3schools readfile (7)


Die Verwendung der php cURL-Bibliotheken wird wahrscheinlich der richtige Weg sein, da diese Bibliothek mehr Funktionen hat als der einfache file_get_contents(...) .

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

Mit PHP ist es möglich, HTTP-Header mit file_get_contents() zu senden?

Ich weiß, dass Sie den Benutzeragent aus Ihrer php.ini Datei senden können. HTTP_ACCEPT Sie jedoch auch andere Informationen wie HTTP_ACCEPT , HTTP_ACCEPT_LANGUAGE und HTTP_CONNECTION mit file_get_contents() ?

Oder gibt es eine andere Funktion, die dies erreichen wird?




Wenn Sie HTTPS nicht benötigen und curl auf Ihrem System nicht verfügbar ist, können Sie fsockopen

Diese Funktion öffnet eine Verbindung, von der Sie sowohl lesen als auch schreiben können, wie Sie es mit einem normalen Dateihandle tun würden.




Sie können diese Variable verwenden, um file_get_contents() nach der Funktion file_get_contents() .

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



Ja.

Wenn man file_get_contents auf einer URL aufruft, sollte man die Funktion stream_create_context verwenden, die auf php.net ziemlich gut dokumentiert ist

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




Hier ist, was für mich funktionierte (Dominic war nur eine Zeile 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);



Eigentlich beim weiteren Lesen der Funktion 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);

Vielleicht können Sie diesem Muster folgen, um das zu erreichen, was Sie suchen. Ich habe das jedoch nicht persönlich getestet. (Und wenn es nicht funktioniert, schauen Sie sich meine andere Antwort an)




Für den Fall, dass noch jemand darauf achtet ... Ab PHP 5.4.0 ist Alpha 1 <?= Immer verfügbar:

http://php.net/releases/NEWS_5_4_0_alpha1.txt

Es sieht also so aus, als wären kurze Tags (a) akzeptabel und (b) hier, um zu bleiben. Für jetzt zumindest ...





php header