jsoup postpost 和 cookie

2022-08-31 20:06:18

我正在尝试使用jsoup登录到站点,然后抓取信息,我遇到了一个问题,我可以成功登录并从索引创建文档.php但我无法在站点上获取其他页面。我知道我需要在发布后设置一个cookie,然后在我尝试打开网站上的另一个页面时加载它。但是我该怎么做呢?以下代码允许我登录并获取索引.php

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

我知道我可以使用apache httpclient来做到这一点,但我不想这样做。


答案 1

当您登录网站时,它可能正在设置一个授权的会话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();

答案 2
//This will get you the response.
Response res = Jsoup
    .connect("loginPageUrl")
    .data("loginField", "login@login.com", "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();

推荐