2015-07-07 8 views
5

Ich muss mich in Linkedin mit Jsoup, vorzugsweise verbinden.Einloggen in Linkedin mit JSoup

Dies ist, was ich benutze, um mich auf einer anderen Website anzumelden, aber es funktioniert nicht für Linkedin.

Connection.Response res = Jsoup 
    .connect("https://www.linkedin.com/uas/login?goback=&trk=hb_signin") 
    .data("session_key", mail, "session_password", password) 
    .method(Connection.Method.POST) 
    .timeout(60000). 

// Also tried "https://www.linkedin.com/uas/login-submit" 

Map<String, String> loginCookies = res.cookies(); 
    //Checking a profile to see if it was succesful or if it returns the login page.  
Document currentPage = Jsoup.connect(someProfileLink).cookies(loginCookies).timeout(10000). 
System.out.println("" + currentPage.text()); 

Was mache ich falsch?

Ich muss in der Lage sein, Benutzerprofile mit einem Web-Crawler abzurufen, aber was auch immer ich versuche, ich kann die Login-Cookies nicht bekommen.

+0

ist 'session_key' und' session_password' die richtigen Feldnamen in für verknüpft sein Posting? – Falmarri

+0

Ja, wie es in der Antwort unten erscheint, die funktioniert. Danke für deine Frage! –

Antwort

2

Sie können mit diesem Code in Linkedin anmelden:

try { 

       String url = "https://www.linkedin.com/uas/login?goback=&trk=hb_signin"; 
       Connection.Response response = Jsoup 
         .connect(url) 
         .method(Connection.Method.GET) 
         .execute(); 

       Document responseDocument = response.parse(); 
       Element loginCsrfParam = responseDocument 
         .select("input[name=loginCsrfParam]") 
         .first(); 

       response = Jsoup.connect("https://www.linkedin.com/uas/login-submit") 
         .cookies(response.cookies()) 
         .data("loginCsrfParam", loginCsrfParam.attr("value")) 
         .data("session_key", "your_login") 
         .data("session_password", "your_password") 
         .method(Connection.Method.POST) 
         .followRedirects(true) 
         .execute(); 

       Document document = response.parse(); 

    //   System.out.println(document) 

       System.out.println("Welcome " 
         + document.select(".act-set-name-split-link").html()); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
+1

Vielen Dank! Es funktioniert natürlich. Eine letzte Bitte, wenn ich darf: Könnten Sie bitte den Vorgang erläutern? Warum benötigt es die Antwort zur Anmeldung? Was ist Linkedin, das für JSoup benötigt, um die Dinge auf diese Weise zu tun und nicht auf die einfache Art? –

+2

@SorinGrecu Um den Authentifizierungsprozess zu bestehen, müssen Sie Ihrer POST-Anfrage Sitzungscookies und ein CSRF-Token hinzufügen. Lesen Sie [hier] (http://stackoverflow.com/questions/5207160/what-is-a-csrf-token-what-is-its-importance-and-how-does-it-work) über CSRF-Token. – Sestertius