使用 Jsoup 解决登录表单提交问题
尽管提交了正确的登录凭据,但提供的代码无法对用户进行身份验证并显示登录页面,指示潜在的实现问题。
代码中缺少的一个重要方面是包含 VIEWSTATE 和 EVENTVALIDATION 值。网站登录需要这些值,并且可以从初始 GET 请求的响应中检索:
<code class="java">Document doc = loginForm.parse(); Element e = doc.select("input[id=__VIEWSTATE]").first(); String viewState = e.attr("value"); e = doc.select("input[id=__EVENTVALIDATION]").first(); String eventValidation = e.attr("value");</code>
将这些值与用户名和密码一起合并到 POST 请求中可确保成功登录:
<code class="java">org.jsoup.nodes.Document document = (org.jsoup.nodes.Document) Jsoup.connect("https://www.capitaliq.com/CIQDotNet/Login.aspx/authentication.php").userAgent("Mozilla/5.0") .data("myLogin$myUsername", "MyUsername") .data("myLogin$myPassword, "MyPassword") .data("myLogin$myLoginButton.x", "22") .data("myLogin$myLoginButton.y", "8") .data("__VIEWSTATE", viewState) .data("__EVENTVALIDATION", eventValidation) .cookies(loginForm.cookies()) .post();</code>
此外,将 userAgent 字段添加到 GET 和 POST 请求中可以模拟浏览器,并确保与手动登录时收到的响应一致。
或者,可以通过以下方式启用“记住我”字段:将以下行添加到 POST 请求:
<code class="java">.data("myLogin$myEnableAutoLogin", "on")</code>
以上是如何通过合并 VIEWSTATE 和 EVENTVALIDATION 值来解决 Jsoup 的登录表单提交问题?的详细内容。更多信息请关注PHP中文网其他相关文章!