我在这里发帖是因为我无计可施。我正在使用 Jsoup 发布用于登录的 HTML 数据。奇怪的是我可以在表单中输入数据,按登录,然后从网站上得到响应。但是,即使使用正确的登录凭据,该网站仍告诉我无法登录。关于为什么会这样,我有一些想法:
1) HTTPS://位于我尝试连接的 URL 之前,我读到有时 Jsoup 在验证 SSL 证书时遇到问题。
2) 我知道 cookie 是个问题。当我登录到该网站后在 Chrome 上使用开发人员选项时,当我打印出 Connection.Response 的 cookie 时,那里有一个 cookie 不存在。
3) 当我尝试登录后使用 Jsoup 打印生成的文档时,出现奇怪的“注意:您的数据没有丢失。使用 SSL 安全登录后将发布”消息。我不知道那是什么意思,谷歌显然也不知道。
为了保证安全,我删除了我正在连接的实际 URL,但下面的代码应该仍然有某种意义。
String encodeUser = URLEncoder.encode(username, "UTF-8");
String encodePass = URLEncoder.encode(password, "UTF-8");
Connection.Response loginForm = Jsoup.connect("https://----")
.method(Method.GET)
.userAgent("Mozilla/5.0")
.execute();
Log.v("Miles", String.valueOf(loginForm.cookies()));
Document homeDoc = Jsoup.connect("--------")
.cookie("T3Version", loginForm.cookie("T3Version"))
.data("_name", encodeUser, "_pass", encodePass, "_login", "in")
.referrer("https://web.wm.edu/studenthappenings/preview.php")
.userAgent("Mozilla/5.0")
.method(Connection.Method.POST)
.timeout(1000)
.post();
Log.v("Miles", String.valueOf(loginForm.cookies()));
System.out.println(homeDoc.body());
if (homeDoc.body().html().contains("Cannot perform login")){
Log.v("Miles", "Cannot perform login");
}
它总是进入 if 循环并打印日志。
帮助?我很乐意提供更多信息,因为在为我的愚蠢问题设计解决方案时您可能需要它。
最佳答案
最终将 Jsoup 降级为 html 抓取和读取数据的唯一目的,使用 HttpClient 等登录网站。 Jsoup 很棒,但并不令人惊奇。
关于android - 发布 JSOUP 文档以登录网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24481151/