Ich versuche derzeit mit der URL Klasse mich auf einer Seite einzuloggen. Bei der Seite handelt es sich um paket.de, ich möchte für mich privat ein kleines Programm schreiben, sodass ich meine Bestellungen einsehen und auflisten kann, ohne das ich mich jedes mal mit dem Browser einloggen muss. Ich habe schon Probleme beim einloggen, egal ob mit Java oder mit dem Firefox Add-on Live HTTP-Headers. Ich habe mich an dieses Beispiel gehalten.
Zur Übersichtlichkeit teile ich diesen Thread in zwei Abschnitten auf...
1. Live HTTP-Headers Versuch
Der Seiten aufruf bei paket.de sieht wie folgt aus:
Antwort vom Server auf diesem HTTP-Request:
Jetzt nehme ich mir den Cookie aus dem Antwort header und sende diesen mit den Login-Daten über einen neuen Post Request ab:
Als Antowort auf diesen Request bekomme ich eine Datei namens "desktop" vom Typ text/x-netuix-json-comment-filtered angeboten. Also war der login nicht erolgreich.
2. Java-Code
Das der folgene Teil nicht funktionieren wird ist mir klar, wenn es schoh nicht mit Live HTTP-Headers funktioniert, kann es ja garnicht funktionieren. Dennoch füge ich es hinzu, vllt. findet ja auch jemand hier einen Fehler. (Nicht kompilierbar und alles zu einem Code zusammengefügt um es kurz zu halten, bestimmte Teile des Codes waren in einzelne Methoden.)
Vielleicht kann mir ja jemand helfen.
Liebe Grüße,
Peter
Zur Übersichtlichkeit teile ich diesen Thread in zwei Abschnitten auf...
- Live HTTP-Headers Versuch
- Java-Code
1. Live HTTP-Headers Versuch
Der Seiten aufruf bei paket.de sieht wie folgt aus:
Code:
https://www.paket.de/pkp/appmanager/pkp/desktop?_nfpb=true&_portlet.async=false&_pageLabel=pkp_portal_page_introduction
GET /pkp/appmanager/pkp/desktop?_nfpb=true&_portlet.async=false&_pageLabel=pkp_portal_page_introduction HTTP/1.1
Host: www.paket.de
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cache-Control: max-age=0
Code:
HTTP/1.1 200 OK
Date: Sun, 16 Dec 2012 18:51:19 GMT
Server: DHL
X-Frame-Options: SAMEORIGIN
Cache-Control: no-cache, must-revalidate, no-store
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: PKPSESSIONID=k086QTYHv38Kyq2gCtDn4tcvV3rmQpT2THmZ9Ptc8JxCvLrvlkLp!787135418; path=/pkp; HttpOnly
X-Content-Type-Options: nosniff
ntCoent-Length: 52940
Keep-Alive: timeout=25
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip
Content-Length: 10094
Jetzt nehme ich mir den Cookie aus dem Antwort header und sende diesen mit den Login-Daten über einen neuen Post Request ab:
Code:
https://www.paket.de/pkp/appmanager/pkp/desktop?_nfpb=true&_nfls=false&_pageLabel=pkp_portal_page_login&_windowLabel=portletInstance_customerLogin&portletInstance_customerLogin_actionOverride=/de/deutschepost/ubbrief/dhl/pkp/portlets/externallogin/externalLogin&_nfxr=true
POST /pkp/appmanager/pkp/desktop?_nfpb=true&_nfls=false&_pageLabel=pkp_portal_page_login&_windowLabel=portletInstance_customerLogin&portletInstance_customerLogin_actionOverride=/de/deutschepost/ubbrief/dhl/pkp/portlets/externallogin/externalLogin&_nfxr=true HTTP/1.1
Host: www.paket.de
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
x-bea-netuix-xhr: true
Referer: https://www.paket.de/pkp/appmanager/pkp/desktop?_nfpb=true&_portlet.async=false&_pageLabel=pkp_portal_page_introduction
Content-Length: 54
Cookie: PKPSESSIONID=k086QTYHv38Kyq2gCtDn4tcvV3rmQpT2THmZ9Ptc8JxCvLrvlkLp!787135418; s_cc=true; s_sq=%5B%5BB%5D%5D
Pragma: no-cache
Cache-Control: no-cache
dhl_gkuser=4514235&dhl_gkpass=fasdgdasfg&headerLogin=1
2. Java-Code
Das der folgene Teil nicht funktionieren wird ist mir klar, wenn es schoh nicht mit Live HTTP-Headers funktioniert, kann es ja garnicht funktionieren. Dennoch füge ich es hinzu, vllt. findet ja auch jemand hier einen Fehler. (Nicht kompilierbar und alles zu einem Code zusammengefügt um es kurz zu halten, bestimmte Teile des Codes waren in einzelne Methoden.)
Java:
URL paket;
HttpsURLConnection connection;
String body, cookie, email, password;
paket = new URL("https://www.paket.de/pkp/appmanager/pkp/desktop?_nfpb=true&_nfxr=false&_pageLabel=pkp_portal_page_introduction&_nfls=false");
connection = (HttpsURLConnection) paket.openConnection();
connection.setRequestMethod("GET");
connection.connect();
cookie = connection.getHeaderField("Set-Cookie");
System.out.println(connection.getResponseCode());
paket = new URL("https://www.paket.de/pkp/appmanager/pkp/desktop?_nfpb=true&_nfls=false&_pageLabel=pkp_portal_page_login&_windowLabel=portletInstance_customerLogin&portletInstance_customerLogin_actionOverride=/de/deutschepost/ubbrief/dhl/pkp/portlets/externallogin/externalLogin&_nfxr=true");
connection = (HttpsURLConnection) paket.openConnection();
body = "dhl_gkuser=" + URLEncoder.encode(email, "UTF-8") + "&" + "dhl_gkpass=" + URLEncoder.encode(password, "UTF-8") + "&" + "headerLogin=1";
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", String.valueOf(body.length()));
connection.setRequestProperty("Cookie", cookie);
OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
writer.write(this.body);
writer.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
for(String line; (line = reader.readLine()) != null;)
{
data.append(line);
}
writer.close();
reader.close();
Vielleicht kann mir ja jemand helfen.
Liebe Grüße,
Peter