HTTP 1.0 GET gezielt auf Datei

Hallo,

mein Problem klingt vielleicht ganz einfach, ich habe aber bisher nirgends eine Lösung gefunden. Es geht darum, mittels fsockopen eine Datei auf einem Server auszulesen (fopen geht nicht, wegen eines mgl. time out).

So gelingt es mir zwar, die Verbindung zum Server herzustellen, aber eine konkrete Datei (also nicht index.html o.ä) funktioniert nicht.
Ich verwende folgende Syntax:

<?php $errno = 0;
$errstr = " "; $con = fsockopen("[www.ralf-pitscheneder.de](http://www.ralf-pitscheneder.de)", 80, &$errno, &$errstr, 5); if (! $con) { echo "$errno, $errstr" ; echo "Verbindung gescheitert"; }else{ fputs ($con, "GET /test.html HTTP/1.0\r\n\r\n"); while (! feof ($con)) { echo fgets ($con, 1024); } fclose($con); } ?\> Das Script bringt folgende Meldung: HTTP/1.1 404 Not Found Date: Sat, 21 Feb 2004 18:56:19 GMT Server: Apache Connection: close Content-Type: text/html; charset=iso-8859-1 Not Found The requested URL /test.html was not found on this server. Obwohl /test.html aber im Hauptverzeichnis liegt: [http://www.ralf-pitscheneder.de/test.html](http://www.ralf-pitscheneder.de/test.html) Weiss hier irgendjemand weiter ? Danke ! Gruß Ralf

Hallo Ralf,

du musst eine Host-Angabe in der HTTP-Anfrage mitsenden. Ich denke mal, dass du Virtual Hosting verwendest, da gibt es eben kein 1:1-Verhältnis zwischen Hostname und IP-Adresse. Deswegen musst du dem Server sagen, welchen virtuellen Host du möchtest.

Die komplette Anfrage kann dann in etwa so aussehen:

GET /test.html HTTP/1.0
Host: www.ralf-pitscheneder.de

Viele Grüße
Patrick Canterino

http://devedit.sourceforge.net/

Bevor man das Rad neuerfindet kannste doch auch eine fertige Browserklasse benutzen: http://sourceforge.net/projects/snoopy/. Damit kannst du dann auch SSL Requests machen (Falls du das irgendwann mal brauchst).

Achtung: „Host“ ist ein HTTP 1.1 Header-Feld. Also auch HTTP/1.1 schreiben.

Grüße
Bruno

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]