使用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中文網其他相關文章!