2011-06-21 14 views
44

Próbuję użyć jsoup do zalogowania się na stronie, a następnie skrobania informacji, napotykam na problem, mogę się zalogować i utworzyć dokument z index.php, ale nie mogę uzyskać innych stron na stronie. Wiem, że muszę ustawić plik cookie po opublikowaniu, a następnie załadować go, gdy próbuję otworzyć inną stronę w witrynie. Ale jak to zrobić? Poniższy kod pozwala mi zalogować się i uzyskać index.phpjsoup wysyłanie i cookie

Document doc = Jsoup.connect("http://www.example.com/login.php") 
       .data("username", "myUsername", 
        "password", "myPassword") 
       .post(); 

Wiem, że mogę użyć apache httpclient do tego, ale nie chcę.

+0

czy ten kod działał, aby się zalogować i pobrać informacje z witryny? Coz w moim przypadku nie działa – lucifer

+0

możesz zobaczyć mój kod tutaj http://stackoverflow.com/questions/28110219/how-to- przeszukiwarka-a-witryna-po-zalogowaniu-w-to-z-nazwą-użytkownika-i-hasło? noredirect = 1 # comment44615745_28110219 – lucifer

Odpowiedz

93

Po zalogowaniu się do witryny prawdopodobnie ustawia ona autoryzowany plik cookie sesji, który należy przesłać na kolejnych prośbach o zachowanie sesji.

Można dostać cookie takiego:

Connection.Response res = Jsoup.connect("http://www.example.com/login.php") 
    .data("username", "myUsername", "password", "myPassword") 
    .method(Method.POST) 
    .execute(); 

Document doc = res.parse(); 
String sessionId = res.cookie("SESSIONID"); // you will need to check what the right cookie name is 

a następnie wysłać go na następne żądanie jak:

Document doc2 = Jsoup.connect("http://www.example.com/otherPage") 
    .cookie("SESSIONID", sessionId) 
    .get(); 
+0

Właśnie tego potrzebowałem, dziękuję. – Gwindow

+0

@ Jonathan Hedley od czasu, gdy utworzyłeś JSoup i jest bardzo pomocny. Pomóż mi z tym http://stackoverflow.com/questions/20908946/jsoup-adding-extra-encoded-stuff- for-an-html. Są dodatki Kodowanie na końcu ramki iframe, niezależnie od tego, co robię. Dzięki Swaraj –

+0

, ale jak uzyskać pliki cookie HttpOnly? – iAmLearning

17
//This will get you the response. 
Response res = Jsoup 
    .connect("loginPageUrl") 
    .data("loginField", "[email protected]", "passField", "pass1234") 
    .method(Method.POST) 
    .execute(); 

//This will get you cookies 
Map<String, String> loginCookies = res.cookies(); 

//And this is the easiest way I've found to remain in session 
Document doc = Jsoup.connect("urlYouNeedToBeLoggedInToAccess") 
     .cookies(loginCookies) 
     .get(); 
+0

To nie działa teraz. Staram się zalogować i zrzucić konto na Facebooku. Teraz Facebook wprowadza jeszcze więcej parametrów. LSD: AVptuGRS e-mail: *** wprost: *** default_persistent: 0 czasowa: -120 lgnrnd: 043627_eQnN lgnjs: 1383914188 regionalne: pl Sprawdź ten link: http://stackoverflow.com/questions/ 19851747/login-via-jsoup –

+0

Dzięki, to działa dla mnie .. –

+0

Hej człowieku, zrobiłem to tak jak powiedziałeś. ale nie otrzymuję strony "urlYouNeedToBeLoggedInToAccess". Proszę odpowiedz mi. –

1

gdzie kod był:

Document doc = Jsoup.connect("urlYouNeedToBeLoggedInToAccess").cookies().get(); 

Miałem trudności, dopóki się nie zmieniłem to:

Document doc = Jsoup.connect("urlYouNeedToBeLoggedInToAccess").cookies(cookies).get(); 

Teraz działa bez zarzutu.

0

Oto co można spróbować ...

import org.jsoup.Connection; 


Connection.Response res = null; 
    try { 
     res = Jsoup 
       .connect("http://www.example.com/login.php") 
       .data("username", "your login id", "password", "your password") 
       .method(Connection.Method.POST) 
       .execute(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

Teraz zapisz wszystkie pliki cookie i uczynić wniosek drugiej strony, którą chcesz.

//Store Cookies 
cookies = res.cookies(); 

Żądanie na inną stronę.

try { 
    Document doc = Jsoup.connect("your-second-page-link").cookies(cookies).get(); 
} 
catch(Exception e){ 
    e.printStackTrace(); 
} 

Zapytaj, czy potrzebujesz dalszej pomocy.