Stephan: HTTP Header

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...

  1. 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.

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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

      1. 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.

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. 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.
    1. Hi,

      http://www.ietf.org/rfc/rfc2068.txt

      *hüstel* irgendwo ist mir doch mal die Zeile "Obsoletes: 2068" untergekommen ... wo war das noch gleich ...

      Cheatah ;-)

      --
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. 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

        --
        The only program that runs perfectly every time, is a virus.
        1. 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

          --
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
          1. 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

            --
            The only program that runs perfectly every time, is a virus.
    2. 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

      1. Hi,

        also dann so, wie ich es verstanden habe:

        nein. Wobei der Connection-Header (IMHO) eine Verbesserung darstellt.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
      2. 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

        --
        The only program that runs perfectly every time, is a virus.
        1. 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

          1. 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

            --
            The only program that runs perfectly every time, is a virus.
            1. 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

              --
              MudGuard? Siehe http://www.Mud-Guard.de/
              Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
              1. 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

                --
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes
              2. 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

                --
                The only program that runs perfectly every time, is a virus.
            2. 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

              1. 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.

                --
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes
                1. 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

                  1. 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

                    --
                    X-Will-Answer-Email: No
                    X-Please-Search-Archive-First: Absolutely Yes