2015-07-07 18 views
5

ho bisogno di effettuare il login in LinkedIn con Jsoup, preferibilmente.Accesso in LinkedIn con JSoup

questo è quello che sto usando per accedere ad un altro sito web, ma non funziona per 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()); 

Cosa sto facendo male?

ho bisogno di essere in grado di recuperare i profili utente utilizzando un web crawler, ma tutto quello che provo non posso ottenere i cookie di accesso.

+0

è '' session_key' e session_password' i nomi dei campi corretti per essere distacco per collegata a? – Falmarri

+0

Sì, come appare nella risposta seguente, che funziona. Grazie per la tua domanda! –

risposta

2

puoi effettuare il login in LinkedIn con questo codice:

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

Grazie mille! Funziona, ovviamente. Un'ultima richiesta, se posso: potresti spiegare il processo? Perché ha bisogno della risposta per accedere? Che cosa usa Linkedin per JSoup per fare le cose in questo modo e non in modo semplice? –

+2

@SorinGrecu Per passare il processo di autenticazione è necessario aggiungere cookie di sessione e token CSRF alla richiesta POST. Leggi [qui] (http://stackoverflow.com/questions/5207160/what-is-a-csrf-token-what-is-its-importance-and-how-does-it-work) sui token CSRF. – Sestertius