Philipp Hasenfratz: HTTP Header

Beitrag lesen

Halihallo Stephan

fputs ($handle, "GET / HTTP/1.1 \n Host: $url\n Cache-Control: no-cache\n User-Agent: Mein Crawler/1.0\n"); // übergibt User-Agent
Dabei ist $url die aktuelle Datei, User Agent ist mein Crawler. Ist das richtig so?

Nein. http://www.ietf.org/rfc/rfc2068.txt
Keine Leerzeichen vor und nach den \n. Leerzeichen nach dem Header-
Fieldname sind OK.
Cache-Control ist ein HTTP-Header-Field, welches vom _Server_
gesendet wird, du emulierst jedoch ein Client. Lass es weg. Wenn du
keine Keep-Alive (persistente) Verbindung implementierst, musst du
auf jeden Fall auch "Connection: close" senden, ansonsten hält der
Server die Verbindung offen.
Zudem werden die Header durch CRLF terminiert, nicht durch \n.
Host enthält nur den Hostnamen, nicht die angeforderte URL, diese
muss bei GET $url HTTP/1.1 rein (und hier ohne Hostnamen und "http").

Für weitere Informationen, lies Section "5 Request" der
referenzierten Doku.

Viele Grüsse

Philipp

--
The only program that runs perfectly every time, is a virus.