首页 >后端开发 >php教程 >如何通过合并 VIEWSTATE 和 EVENTVALIDATION 值来解决 Jsoup 的登录表单提交问题?

如何通过合并 VIEWSTATE 和 EVENTVALIDATION 值来解决 Jsoup 的登录表单提交问题?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-20 13:34:021020浏览

How to Resolve Login Form Submission Issues with Jsoup by Incorporating VIEWSTATE and EVENTVALIDATION Values?

使用 Jsoup 解决登录表单提交问题

尽管提交了正确的登录凭据,但提供的代码无法对用户进行身份验证并显示登录页面,指示潜在的实现问题。

代码中缺少的一个重要方面是包含 VIEWSTATEEVENTVALIDATION 值。网站登录需要这些值,并且可以从初始 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn