2016-03-28 4 views
0

Ich habe kämpfen in this zur Login-Seite, damit ichAnmeldung Erfolglos in diese Seite mit Jsoup

Seite für eine den privaten

learn.sun.ac.za/my kratzen konnte jetzt gut. Ich habe mehrere SO-Posts durchsucht und versucht, den Ratschlag von beiden auf keinen Effekt anzuwenden.

Versuch 1

String url = "https://sso-prod.sun.ac.za/cas/login?service=http%3A%2F%2Flearn.sun.ac.za%2Flogin%2Findex.php"; 
String userAgent = "Mozilla/5.0"; 

      Connection.Response response = Jsoup.connect(url) 
        .userAgent(userAgent) 
        .method(Connection.Method.GET) 
        .execute(); 

      response = Jsoup.connect(url) 
        .userAgent(userAgent) 
        .cookies(response.cookies()) 
        .data("action", "login") 
        .data("username", "MYUSERNAME") 
        .data("password", "MYPASSWORD") 
        .method(Connection.Method.POST) 
        //.followRedirects(true) 
        .execute();    

      Document doc = Jsoup.connect("http://learn.sun.ac.za/my") 
        .cookies(response.cookies()) 
        .userAgent(userAgent) 
        .get(); 

      System.out.println(doc.title()); 

Ausgabe: "Single Sign on | Korporation"

darauf hinweist, dass es nicht anmelden.

Von der Beratung in anderen Beiträgen überwacht ich den Verkehr über Chrom und hinzugefügt alle Header von dort auf den Code

String url = "https://sso-prod.sun.ac.za/cas/login?service=http%3A%2F%2Flearn.sun.ac.za%2Flogin%2Findex.php"; 
String userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36"; 

      Connection.Response response = Jsoup.connect(url) 
        .userAgent(userAgent) 
        .method(Connection.Method.GET) 
        .execute(); 

      response = Jsoup.connect(url) 
        .userAgent(userAgent) 
        .cookies(response.cookies()) 
        .header("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8") 
        .header("accept-encoding", "gzip, deflate") 
        .header("accept-language", "en-US,en;q=0.8") 
        .header("cache-control", "max-age=0") 
        .header("connection", "keep-alive") 
        .header("content-length", "114") 
        .header("content-type","application/x-www-form-urlencoded") 
        .header("dnt", "1") 
        .header("host", "sso-prod.sun.ac.za") 
        .header("origin", "https://sso-prod.sun.ac.za") 
        .header("referer", "https://sso-prod.sun.ac.za/cas/login?service=http%3A%2F%2Flearn.sun.ac.za%2Flogin%2Findex.php") 
        .header("upgrade-insecure-requests", "1") 
        .data("action", "login") 
        .data("username", "MYUSERNAME") 
        .data("password", "MYPASSWORD") 
        .data("lt", "LT-3042474-9t3oldTU1253G6HVqFffHgMWxnYXdg") 
        .data("execution", "e1s1") 
        .data("_eventId", "submit") 
        .method(Connection.Method.POST) 
        //.followRedirects(true) 
        .execute();    

      Document doc = Jsoup.connect("http://learn.sun.ac.za/my") 
        .cookies(response.cookies()) 
        .userAgent(userAgent) 
        .get(); 

      System.out.println(doc.title()); 

die das gleiche Ergebnis hatte. Was ich getan habe, war, den tatsächlichen HTML-Code auszudrucken und festgestellt, dass es keine Login-Fehlermeldung irgendwo im Code gab, was bedeutet, dass ich irgendwo vermasselt und nicht das Formular tatsächlich eingereicht?

das ist, was eine erfolgreiche Chrom Login sieht aus wie enter image description here enter image description here

Antwort

1

Das ist, weil Ihr LT Wert falsch ist - sollten Sie den Wert für jede neue Sitzung erhalten, und nicht einen gewissen Wert zu senden, wie Sie tun. Schauen Sie sich die HTML der Seite:

LT

Der Selektor für die DIV, dass der Wert div.controls:nth-child(1) ist enthält.
So sind die Schritte -
Laden Sie die Seite
den Wert von LT Erhalten Sie es in Ihre POST Anfrage.

+0

löste das Problem! – SimpleJack