Parsen der HTTP-Header mit PHP-fsockopen?
Ich habe ein Skript eingerichtet, dass aus Gründen der Notwendigkeit bekommt sowohl der HTTP-Antwort-header und dann Inhalt einer GET-Anfrage mit fsock.
function checkUrl($host,$url,$port) {
$fp = fsockopen($host, $port, $errno, $errstr, 10);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET $url HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
$response = fgets($fp, 1024);
print(substr($response,9,3));
}
fclose($fp);
}
}
Nenne ich es und bekommen alle die richtigen Daten zurück, wenn ich einfach nur echo Sie alle aus. Aber eigentlich brauche ich die Rückkehr aus der Funktion wird der HTTP-STATUS-Code.
also 404 oder 200 oder 301 etc
Aber der obige code gibt den Fehler-code sicher, aber dann mit einer Last von Kauderwelsch am Ende welches ich nicht verstehe, wenn ich nur 3 chars!
z.B.
404, 2BM_n: Encype HThe tp-me=srcsrclanstaPre> lanmg=[0][1][2][3][4][5][6][7][8][9][10[11[12 swt.i> ypeeleamiize#99eco#66ade#33izeine#CCize { #66izeeig tmardespath=th=th=th=th=th=th=spardeolordeignign bocol widwidwid col bler> td Sorabl> e> rdeolordespath=th=th= bo spardeoloe="lanSen>
Das führt mich zu glauben, meine Antwort ist eigentlich viel komplexer als einfach nur ein string, richtig? Etwas besonderes mit der Kopf-oder bin ich Missverständnis, wie fgets funktioniert? Jede Hilfe sehr geschätzt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, Sie drucken aus, dass die substring-für jeder block mit 1024 Zeichen statt nur die erste. Die Lösung ist, nicht die Schleife. Ändern Sie diese:
Nur diese:
Oder auch nur diese, wirklich, da müssen Sie nur die ersten 13 Zeichen nicht in den ersten 1024:
Im moment bist du der Iteration über jede Zeile der header - /Antwort-auch wenn Sie nur daran interessiert sind, in der ersten Zeile. Versuchen Sie dies:
Wenn Sie nur daran interessiert sind, in den Kopf-und nicht die Antwort, die ich vorschlagen würde, dass Sie eine
HEAD
- Anforderung statt einerGET
ein.Sei denn, es gibt einen wirklich zwingenden Grund, Sie nicht zu ich würde vorschlagen, dass Sie diese Anforderung mit
CURL
anstatt zu versuchen, um alle von der low-level Kram in deinen PHP-app-Logik.