使用 Jsoup 提交登录表单时遇到的挑战
尽管输入了有效的登录凭据,但使用提供的代码访问站点时可能会遇到困难。执行后,代码无法进行身份验证,这表明存在潜在问题。
一个可能的疏忽涉及用户名、密码和 cookie 之外的其他值的要求。具体来说,该站点需要包含 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 字段以确保与网站特定浏览器渲染的兼容性。
增强
要激活“记住登录时的“我”功能:
<code class="java">.data("myLogin$myEnableAutoLogin", "on")</code>
以上是如何克服使用 Jsoup 提交登录表单时的身份验证问题的详细内容。更多信息请关注PHP中文网其他相关文章!