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