web-dev-qa-db-ja.com

jsoupの投稿とcookie

Jsoupを使用してサイトにログインしてから情報をスクレイピングしようとしています投稿後にCookieを設定し、サイトの別のページを開こうとするときにそれを読み込む必要があることは知っています。しかし、どうすればいいですか?次のコードを使用すると、ログインしてindex.phpを取得できます

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

Apache httpclientを使用してこれを実行できることは知っていますが、したくありません。

47
Gwindow

サイトにログインすると、おそらくセッションを維持するために後続のリクエストで送信する必要がある承認済みセッションCookieが設定されます。

このようなCookieを取得できます。

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

そして、次のリクエストで次のように送信します:

Document doc2 = Jsoup.connect("http://www.example.com/otherPage")
    .cookie("SESSIONID", sessionId)
    .get();
98
Jonathan Hedley
//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();

コードの場所:

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

次のように変更するまで問題がありました。

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

今では問題なく動作しています。

1
user1935501

ここにあなたが試すことができるものがあります...

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();
    }

ここですべてのCookieを保存し、希望する他のページにリクエストを送信します。

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

別のページにリクエストします。

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

さらに支援が必要かどうかを尋ねます。

0
iamvinitk