【问题标题】:JSoup cookie handling with redirect on GETJSoup cookie 处理与 GET 上的重定向
【发布时间】:2014-05-19 18:25:41
【问题描述】:

我正在编写必须处理登录页面的小应用程序。我需要在 URL 中使用登录名和密码来连接到应用程序。例如:“www.page.com/dsd?login=xxx&password=yyy”

我只能用jsoup。

public Document getContentOfPage(String url) throws IOException {
    return Jsoup.connect(url)
            .userAgent("Mozilla")
            .cookies(getCookiesForSession(url))
            .timeout(50000)
            .get();
}

public Map<String, String> getCookiesForSession(String url) throws IOException {
    Connection.Response res = Jsoup.connect(url)
            .method(Connection.Method.GET).timeout(50000).execute();
    return res.cookies();
}

主要问题是我需要使用 GET 两次。在 cookie 中存储了登录页面时生成的“session_id”和“login”值。 Jsoup 只是忘记了页面请求中的 cookie 并将我重定向到登录页面。有没有机会在单一的 GET 方法中维护 cookie?

提示:HttpGet 在这里完美运行。

【问题讨论】:

  • 如何只调用一次getCookiesForSession,将cookie存储在某处并将它们作为getContentOfPage的参数传递以避免再次调用getCookiesForSession
  • 我需要检查我是否可以登录到页面。如果我将会话 ID 存储在某个地方,我将能够每次都记录...或者如果会话 ID 将从服务器中删除,我根本无法登录。好主意,但对我来说仍然不是一个好的解决方案。

标签: java http url cookies jsoup


【解决方案1】:

您需要存储 cookie。您提出的每个请求都可能会更改您需要使用的 cookie。因此,我会将它们保留在整个 tiem 中,并在您每次请求另一个页面时更新它们。如果您重用它,它们可以存储在类中,否则您需要将它们存储在其他地方并传递它们。

所以在这里你的第一步将是拥有一个 login() 函数来进行登录并设置这些变量。

Connection.Response res = Jsoup.connect(url).method(Connection.Method.GET)
    .timeout(50000).execute();
this.sessionIdCookie = res.cookie("session_id");
this.loginCookie = res.cookie("login");

然后,当您发送 getContentOfPage 函数时,您可以从类中使用它。

【讨论】:

  • 我只需要在下一个请求中使用这些 cookie。我想使用一个 get 登录页面。所以这个解决方案与我使用的类似。最好的办法是使用:"Jsoup.connect(url).userAgent("Mozilla").get();"但饼干消失了。我试过:“Jsoup.connect(url).cookies(new Map()).userAgent("Mozilla").get();"但它仍然没有工作
猜你喜欢
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 2012-02-01
相关资源
最近更新 更多