2015-07-07 47 views
5

Chcę się zalogować do Linkedin z Jsoup, najlepiej.Zaloguj się do Linkedin z JSoup

To jest to, czego używam do logowania do innej witryny, ale nie działa ona dla 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()); 

Co robię źle?

Potrzebuję móc pobierać profile użytkowników za pomocą robota sieciowego, ale cokolwiek próbuję, nie mogę uzyskać plików cookie do logowania.

+0

jest '' session_password' session_key' i poprawnych nazw pól do delegowania do połączone w? – Falmarri

+0

Tak, jak widać w odpowiedzi poniżej, która działa. Dzięki za twoje pytanie! –

Odpowiedz

2

Możesz zalogować się na LinkedIn z tym kodem:

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

Wielkie dzięki! To działa, oczywiście. Ostatnia prośba: czy mógłbym wyjaśnić ten proces? Dlaczego potrzebuje odpowiedzi na logowanie? Co to jest Linkedin używający JSoup do robienia rzeczy w ten sposób, a nie w prosty sposób? –

+2

@SorinGrecu Aby przekazać proces uwierzytelniania, musisz dodać pliki cookie sesji i token CSRF do swojego żądania POST. Przeczytaj [tutaj] (http://stackoverflow.com/questions/5207160/what-is-a-csrf-token-what-is-its-importance-andhowhow-do-work-work) na temat tokenów CSRF. – Sestertius