Login mit HTTPClient verusach "Bad Se-Cookie-Header" -Fehler
eneR
- java
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).
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
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ß!
Hi,
es ist nicht nötig das Passwort zu knacken, ich muss nur die Cookies setzen.
~dave
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
Hihö,
hi,
Exception in thread "main" java.net.ProtocolException: Bad Set-Cookie header:
- Prüfe, ob Deine Response-Header valide sind
Wie mache ich das?
- 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...
- 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ß!
hi,
- 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
Hi,
_Ein Cookie-Header:
user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMTist 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
Hi,
Hihö nochmal :D
_Ein Cookie-Header:
user=xXChesterXx; expires=Tue, 22-May-2012 15:36:21 GMTist 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 GMTVor 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 :)
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
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=nochnvalueEin 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ß!
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 GMTVor 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 ;)
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