eneR: Login mit HTTPClient verusach "Bad Se-Cookie-Header" -Fehler

Hallo,
ich versuche mich auf einer Seite mithilfe von dem HTTPClient einzuloggen. Jedoch bekomme ich bei diesem Versuch stets diese Ausgabe:
"--<Cookies-List>--
--</Cookies-List>--
--<HTML>--
Exception in thread "main" java.net.ProtocolException: Bad Set-Cookie header: user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT; httponly, password=0bb77fc60196a995060dc2ec96a1615bf0cf4304; expires=Tue, 22-May-2012 15:36:21 GMT; httponly, server_id=de72; expires=Wed, 22-Jun-2011 15:36:21 GMT; httponly
No '=' found for token starting at position 222
        at HTTPClient.Cookie.parse(Cookie.java:243)
        at HTTPClient.CookieModule.handleCookie(CookieModule.java:454)
        at HTTPClient.CookieModule.responsePhase1Handler(CookieModule.java:403)
        at HTTPClient.HTTPResponse.handleResponse(HTTPResponse.java:724)
        at HTTPClient.HTTPResponse.getEffectiveURI(HTTPResponse.java:277)
        at dsfarmingbot.Main.main(Main.java:27)
Java Result: 1"

Der Code:

package dsfarmingbot;  
  
import HTTPClient.*;  
  
public class Main {  
  
    public static void main(String[] args) throws Exception {  
        HTTPConnection con = new HTTPConnection("www.die-staemme.de");  
        HTTPClient.CookieModule.setCookiePolicyHandler(null);  
        NVPair[] form_data = new NVPair[5];  
        form_data[0] = new NVPair("user", "***");  
        form_data[1] = new NVPair("clear", "true");  
        form_data[2] = new NVPair("password", "****");  
        form_data[3] = new NVPair("server", "de72");  
        form_data[4] = new NVPair("cookie", "true");  
  
  
        HTTPResponse rsp = con.Post("index.php?action=login&server_list=1", form_data);  
        System.out.println("--<Cookies-List>--");  
        for (Cookie c : HTTPClient.CookieModule.listAllCookies()) {  
            System.out.println(c);  
        }  
        System.out.println("--</Cookies-List>--");  
  
            System.out.println("--<HTML>--");  
            System.out.println(rsp.getEffectiveURI() + "\r\n" + rsp.getText());  
            System.out.println("--</HTML>--");  
    }  
}

Hat Jemand eine Idee warum? Bzw wie man diesen Missstand beheben kann?
Grüße!

*** (Hier ist natürlich der korrekte Benutzername).
**** (Hier natürlich das korrekte Passwort).

  1. Hi,

    Exception in thread "main" java.net.ProtocolException: Bad Set-Cookie header: user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT; httponly, password=0bb77fc60196a995060dc2ec96a1615bf0cf4304; expires=Tue, 22-May-2012 15:36:21 GMT; httponly, server_id=de72; expires=Wed, 22-Jun-2011 15:36:21 GMT; httponly

    Du hast uns soeben deine Zugangsdaten gegeben.
    Ich würde mein Passwort ändern.

    Bei dem Problem das du bei der Programmierung deines Bots (?) hast kann ich dir leider nicht helfen.

    ~dave

    1. Hi,

      Exception in thread "main" java.net.ProtocolException: Bad Set-Cookie header: user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT; httponly, password=0bb77fc60196a995060dc2ec96a1615bf0cf4304; expires=Tue, 22-May-2012 15:36:21 GMT; httponly, server_id=de72; expires=Wed, 22-Jun-2011 15:36:21 GMT; httponly

      Du hast uns soeben deine Zugangsdaten gegeben.
      Ich würde mein Passwort ändern.

      Wie du evtl gemerkt hast, ist das Password ein (Md5-?)Hash und du hast somit immernoch meherere hundert Möglichkeiten :D
      Mal davon abgesehen ist das eh nur ein Testaccount. Wenn du also allzu große Freude daran hast das hochkreative Passwort zu knacken, werde ich dich daran nicht hindern.
      Danke trotzdem für den Hinweis.

      Bei dem Problem das du bei der Programmierung deines Bots (?) hast kann ich dir leider nicht helfen.

      SChade :S

      ~dave

      Gruß!

      1. Hi,

        es ist nicht nötig das Passwort zu knacken, ich muss nur die Cookies setzen.

        ~dave

  2. hi,

    Exception in thread "main" java.net.ProtocolException: Bad Set-Cookie header:

    1. Prüfe, ob Deine Response-Header valide sind
    2. Du hast eine Exception, aber in Deinem Code sehe ich nirgendwo ein try/catch;
    3. Bringe es zunächst mit einem Cookie zum Laufen

    Hotti

    1. Hihö,

      hi,

      Exception in thread "main" java.net.ProtocolException: Bad Set-Cookie header:

      1. Prüfe, ob Deine Response-Header valide sind

      Wie mache ich das?

      1. Du hast eine Exception, aber in Deinem Code sehe ich nirgendwo ein try/catch;

      Ja, ist ja nur Testcode, wenn der Cookie nicht akzeptiert wird, braucht der Rest des Codes auch nicht ausgeführt werden...

      1. Bringe es zunächst mit einem Cookie zum Laufen

      Wie meinst du das?
      Ich will ja mit Cookies arbeiten ( wiehe form_data[4] = new NVPair("cookie", "true"); )...

      Hotti

      Danke ersteinmal für die Antwort & Gruß!

      1. hi,

        1. Prüfe, ob Deine Response-Header valide sind
          Wie mache ich das?

        Es gibt mehrere Möglichkeiten. Oft empfohlen hier: Live HTTP-Headers, eine Erweiterung zum Firefox (nehme ich auch gerne). Ansonsten mit TcpDump, Pcap, Ethereal, Wireshark ... auf dem Network-Interface schnüffeln.

        Dann gibts noch das Serverlog, error, access, hier finden sich auch Hinweise zu fauligen Eiern im Code ;)

        Guck Dir Seiten an, die Cookies senden, also die Headers. Möglicherweise fehlt ein "\n" oder es ist irgendwo "Fliegendreck" dazwischen, nicht RFC-gerechte Header-Zeilen, aufgefallen ist mir z.B. das Wort "httponly"...

        _Ein Cookie-Header:
        user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT

        ist soweit OK, Zeitformat stimmt, Satzbau auch. Mehrere Cookie-Headers müssen Zeile für Zeile untereinander stehen, so z.B.:

        user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT
        user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT
        user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT

        erst, wenn alle Headers raus sind, wird eine Leerzeile gesendet (CRLFCRLF).

        Hotti

        1. Hi,

          _Ein Cookie-Header:
          user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT

          ist soweit OK, Zeitformat stimmt, Satzbau auch. Mehrere Cookie-Headers müssen Zeile für Zeile untereinander stehen, so z.B.:

          user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT
          user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT
          user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT

          Vor allem müsste da erst mal der Name des Headers am Anfang jeder „Zeile“ kommen.

          MfG ChrisB

          --
          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
          1. Hi,

            Hihö nochmal :D

            _Ein Cookie-Header:
            user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT

            ist soweit OK, Zeitformat stimmt, Satzbau auch. Mehrere Cookie-Headers müssen Zeile für Zeile untereinander stehen, so z.B.:

            user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT
            user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT
            user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT

            Vor allem müsste da erst mal der Name des Headers am Anfang jeder „Zeile“ kommen.

            Nehmen wir an das httponly oder die fehlende Domain bringen den HTTPClient durcheinander; Welche Möglichkeiten gibt es, den Cookie "abzufangen" zu modifizieren und erst dann zu setzen?

            MfG ChrisB

            Grüße und vielen Dank schoneinmal/wiedereinmal für die Antworten :)

            1. hi,

              Nehmen wir an das httponly oder die fehlende Domain bringen den HTTPClient durcheinander;

              Das "httponly" gehört nicht in einen Response-Header. Domain ist ein Parameter (Flag), wenn nicht gesetzt, sendet der UA (Client) den Cookie nur an die Origin-Domain.

              Welche Möglichkeiten gibt es, den Cookie "abzufangen" zu modifizieren und erst dann zu setzen?

              Cookies, die ein UA sendet, finden sich serverseitig in der Umgebungsvariable "HTTP_COOKIE". Da können auch mehrere stehen, getrennt mit "; "

              z.B: name=value; nochnname=nochnvalue

              Ein UA sendet die Cookies als Request-Header:
              Cookie: name=value; nochnname=nochnvalue

              Hotti

              1. hi,

                Nehmen wir an das httponly oder die fehlende Domain bringen den HTTPClient durcheinander;

                Das "httponly" gehört nicht in einen Response-Header. Domain ist ein Parameter (Flag), wenn nicht gesetzt, sendet der UA (Client) den Cookie nur an die Origin-Domain.

                Welche Möglichkeiten gibt es, den Cookie "abzufangen" zu modifizieren und erst dann zu setzen?

                Cookies, die ein UA sendet, finden sich serverseitig in der Umgebungsvariable "HTTP_COOKIE". Da können auch mehrere stehen, getrennt mit "; "
                z.B: name=value; nochnname=nochnvalue

                Ein UA sendet die Cookies als Request-Header:
                Cookie: name=value; nochnname=nochnvalue

                Ok, ich denke ich habe verstanden, wo das Problem liegt.
                Jedoch habe ich garkeine Idee, wie ich dieses praktisch beheben könnte...
                Also ich müsste doch den gesendeten Cookie-Header irgendwie modifizieren, damit der HTTPClient (die Libary) den übersetzen kann. Das mitsenden etc übernimmt der dann ja für mich...

                Hotti

                Gruß!

          2. hi,

            user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT
            user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT
            user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT

            Vor allem müsste da erst mal der Name des Headers am Anfang jeder „Zeile“ kommen.

            Ja freilich, da hast Du schon recht ;)

            Set-Cookie: user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMT

            Aber ich fürchte, hier gehts gar nicht um die Response, sondern um einen Client, der Cookies senden möchte ;)

            Also, der Vollständigkeit halber, ein Request-Header für Cookies:

            Cookie: name=value; nochname=nochnvalue

            nochn Hotti ;)

  3. Tach,

    Hat Jemand eine Idee warum? Bzw wie man diesen Missstand beheben kann?

    es sieht so aus, als wäre in der Antwort, die du bekommst etwas drin, mit der deine Klasse nicht umgehen kann. Da die Klassen die du da einbindest soweit ich was dazu finden kann, sehr alt ausehen, könnte es einfach daran leigen. Hast du es mal mit dem Client von Apache probiert?

    mfg
    Woodfighter