HTTP Header
Stephan
- https
0 Cheatah0 Philipp Hasenfratz0 Cheatah0 Stephan
Hallo,
ich sende bei meinem Script, das Seiten Craweln soll, folgenden HTTP Header mit:
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?
Danke schon mal
Stephan
PS: Der User Agent soll wie zB der Googlebot in der Liste von Robotstats oder auch von Webalizer angezeigt werden, eben als Mein Crawler/1.0...
Hi,
Dabei ist $url die aktuelle Datei, User Agent ist mein Crawler. Ist das richtig so?
nein. Der Host-Header muss den Hostnamen beinhalten, keine URL, und der Umbruch muss \015\012 sein, nicht nur \012. Zudem empfehle ich, das Leerzeichen vor den Header-Zeilen zu entfernen.
Cheatah
P.S.: Eine URL ist - im HTTP-Bereich - *niemals* eine Datei.
Hallo,
nein. Der Host-Header muss den Hostnamen beinhalten, keine URL,
was ist der Hostname? Kann ich den festlegen?
und der Umbruch muss \015\012 sein, nicht nur \012.
Welcher Umbruch?
Zudem empfehle ich, das Leerzeichen vor den Header-Zeilen zu entfernen.
das nach dem Komma?
P.S.: Eine URL ist - im HTTP-Bereich - *niemals* eine Datei.
OK, falsch ausgedrückt: Eine URL führt zu einer Datei...
Danke schon mal
Stephan
Hi,
nein. Der Host-Header muss den Hostnamen beinhalten, keine URL,
was ist der Hostname?
ei. Bist Du sicher, dass Du das Netz mit selbstgebauten Handgrana^WRequests beglücken möchtest?
und der Umbruch muss \015\012 sein, nicht nur \012.
Welcher Umbruch?
Der nach jeder Header-Zeile.
Zudem empfehle ich, das Leerzeichen vor den Header-Zeilen zu entfernen.
das nach dem Komma?
Welches Komma? Ach so. Nein, der PHP(?)-Code ist mir völlig schnuppe, ich rede nur von dem HTTP-Request.
P.S.: Eine URL ist - im HTTP-Bereich - *niemals* eine Datei.
OK, falsch ausgedrückt: Eine URL führt zu einer Datei...
Nein. Du möchtest Dich bitte mit den Grundlagen der Techniken auseinandersetzen, die Du ohne ausgereifte Hilfsfunktionen anzuwenden gedenkst. Alles andere dürfte einem Angriff deinerseits gleichzusetzen sein. Wenn Du den RFC gefunden[1] hast, der das von Dir eingesetzte Protokoll definiert (und ihn selbstverständlich auch gelesen hast), bin ich bereit, Dich weiter zu unterstützen.
Cheatah
[1] Das impliziert natürlich, dass Du weißt, was ein RFC ist.
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
Hi,
*hüstel* irgendwo ist mir doch mal die Zeile "Obsoletes: 2068" untergekommen ... wo war das noch gleich ...
Cheatah ;-)
Halihallo Cheatah
http://www.ietf.org/rfc/rfc2068.txt
*hüstel* irgendwo ist mir doch mal die Zeile "Obsoletes: 2068" untergekommen ... wo war das noch gleich ...
*hüstel*, sei still! ;-)
http://www.w3.org/Protocols/rfc2616/rfc2616.html
Viele Grüsse
Philipp
Hi,
*hüstel* irgendwo ist mir doch mal die Zeile "Obsoletes: 2068" untergekommen ... wo war das noch gleich ...
*hüstel*, sei still! ;-)
http://www.w3.org/Protocols/rfc2616/rfc2616.html
nee, die richtige Antwort wäre gewessen: In dem Dokument, aus dem ich obiges Zitat herauskopiert habe ;-)
Cheatah
Halihallo Cheatah
*hüstel*, sei still! ;-)
http://www.w3.org/Protocols/rfc2616/rfc2616.html
nee, die richtige Antwort wäre gewessen: In dem Dokument, aus dem ich obiges Zitat herauskopiert habe ;-)
Uh nein, verda**t! - Und ich hab 20 Sekunden mit Suchen vergeudet!
Richtig! - Du hast natürlich recht :-)
Viele Grüsse
Philipp
Hallo :-)
also dann so, wie ich es verstanden habe:
GET $url HTTP/1.1\nUser-Agent: Mein Crawler/1.0\nConnection: close\n
Oder?
Danke :-)
Stephan
Hi,
also dann so, wie ich es verstanden habe:
nein. Wobei der Connection-Header (IMHO) eine Verbesserung darstellt.
Cheatah
Halihallo Stephan
also dann so, wie ich es verstanden habe:
Statt eine halbe Lösung zu präsentieren, frage lieber nach, was du
_nicht_ verstanden hast.
GET $url HTTP/1.1\nUser-Agent: Mein Crawler/1.0\nConnection: close\n
Ich darf empfehlen, dass du Cheatah's und mein Posting nochmals liest
und fragen stellst, was du genau nicht verstehst. Raten bringt nix.
Verschlimmbesserungen[1] auch nicht. Du musst _verstehen_, nicht
raten.
[1] Warum ist denn plötzlich "Host: xyz" weg?
Viele Grüsse
Philipp
Hallo :-)
also ich habe das nicht verstanden:
--------------------
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").
-------------------
Was muss ich mit GET $url HTTP/1.1 machen? Du meintest doch ohne Hostname und http :-?
Danke schon mal
Stephan
Halihallo Stephan
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").
http://aktuell.de.selfhtml.org/artikel/cgiperl/zeilenumbruch/index.htm
\n hat viele "Gesichter". Aber im HTTP-Umfeld ist nur eines richtig:
"\015\012" (a.k.a. CRLF).
ersetze einfach jedes "\n" in deinem String durch "\015\012", dann
ist es "technisch korrekt". Funktionieren mag es auch anders, aber
es geht hier um fachliche Korrektheit.
Was muss ich mit GET $url HTTP/1.1 machen? Du meintest doch ohne Hostname und http :-?
Beispiel:
du möchtest http://www.download.com/h/somefile.zip runterladen.
Der Hostname ist hier wohl (www.)"download.com". Die Ressource
(nicht Datei ;)) ist /h/somefile.zip. Folglich:
GET /h/somefile.zip HTTP/1.1\015\012
Host: download.com\015\012
\015\012
in _etwa_. Dieser Header ist eben nicht vollständig, aber sollte
deine Frage beantworten.
Viele Grüsse
Philipp
Hi,
du möchtest http://www.download.com/h/somefile.zip runterladen.
Der Hostname ist hier wohl (www.)"download.com". Die Ressource
Nein, der Hostname in Deinem Beispiel ist www.download.com - nicht download.com
Nur weil in vielen Fällen "www.example.org" und "example.org" zufälligerweise sich so verhalten,
als wäre das Vorhandensein des Subdomainnamens "www" egal, ist das noch lange nicht immer der Fall.
cu,
Andreas
Hi,
du möchtest http://www.download.com/h/somefile.zip runterladen.
Der Hostname ist hier wohl (www.)"download.com". Die Ressource
Nein, der Hostname in Deinem Beispiel ist www.download.com - nicht download.com
Nur weil in vielen Fällen "www.example.org" und "example.org" zufälligerweise [...]
Beispiel aus der Praxis: http://spotlight.de/zforen/htm/m/htm-1081943289-18620.html
Cheatah
Halihallo MudGuard
Nein, der Hostname in Deinem Beispiel ist www.download.com - nicht download.com
Yep. Da war ich im Irrtum, obwohl es mit etwas Nachdenken nur logisch
gewesen wäre :-(
Viele Grüsse
Philipp
Hallo miteinander,
ihr macht mich noch ganz verrückt beim Lesen! ;))
http://aktuell.de.selfhtml.org/artikel/cgiperl/zeilenumbruch/index.htm
\n hat viele "Gesichter". Aber im HTTP-Umfeld ist nur eines richtig:
"\015\012" (a.k.a. CRLF).
Was habt ihr nur mit diesen obskuren Oktalzahlen? Schreibt's doch als "\x0D\x0A", dann ist der "Wiedererkennungseffekt" doch gleich viel besser. Nicht dass ich das Oktalsystem für falsch halte, aber ich muss bei solchen Zahlenangaben immer fürchterlich um die Ecke denken. Dezimal, Hex, Binär - alles kein Problem. Aber bitte nicht Oktal! :(
So, jetzt fühle ich mich wieder besser, danke!
Martin
Hi,
Was habt ihr nur mit diesen obskuren Oktalzahlen? Schreibt's doch als "\x0D\x0A", dann ist der "Wiedererkennungseffekt" doch gleich viel besser.
nicht, wenn die übliche Schreibweise "\015\012" lautet.
Dezimal, Hex, Binär - alles kein Problem. Aber bitte nicht Oktal! :(
Mach's wie Douglas Adams[1]: Denke im Tridezimalsystem.
Cheatah
[1] Bob hab ihn selig.
nicht, wenn die übliche Schreibweise "\015\012" lautet.
Okay, wenn man mit Unix großgeworden ist, mag einem das Oktalsystem "üblich" vorkommen - und selbstverständlich kann (und muss) ich es akzeptieren. Für mich ist es trotzdem irgendwie krank, deswegen werde ich weiterhin die hexadezimale Schreibweise verwenden, wenn ich selbst formuliere. Oder, wenn's um Plain Text geht, auch die Mnemonics. CRLF oder CR/LF finde ich dann absolut in Ordnung.
Mach's wie Douglas Adams[1]: Denke im Tridezimalsystem.
Stimmt, da war mal sowas, hmm... *grübel*
In welchem Kontext war das noch? Ich komm gerade nicht drauf.
[1] Bob hab ihn selig.
ACK. 42.
Im stillen Gedenken,
Martin
Hi,
nicht, wenn die übliche Schreibweise "\015\012" lautet.
Okay, wenn man mit Unix großgeworden ist, mag einem das Oktalsystem "üblich" vorkommen
bin ich nicht. Die überall übliche und geläufige Schreibweise eines CRLF ist "\015\012".
Mach's wie Douglas Adams[1]: Denke im Tridezimalsystem.
Stimmt, da war mal sowas, hmm... *grübel*
In welchem Kontext war das noch? Ich komm gerade nicht drauf.
Wie viel ist neun multipliziert mit sechs?
ACK. 42.
Jupp. Rechne das nach.
Cheatah