首页 文章

jsoup发布和cookie

提问于
浏览
46

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

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

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

4 回答

  • 97

    当您登录该站点时,可能会设置一个授权会话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();
    
  • 18
    //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();
    
  • 0

    代码是:

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

    我遇到了困难,直到我改为:

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

    现在它完美无缺 .

  • 1

    这是你可以尝试的......

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

    询问是否需要进一步帮助 .

相关问题