使用Jsoup 提交登入表單時出現問題
所提供程式碼的問題在於,儘管使用了正確的方法,但仍無法成功登入網站登入憑證。程式碼目前會檢索登入頁面,但未能執行成功登入。
根本問題是提交過程需要使用者名稱、密碼和 cookie 以外的額外參數。具體來說,該網站需要“VIEWSTATE”和“EVENTVALIDATION”值。
解決方案
要解決此問題,必須從第一個回應中擷取這些附加價值GET 請求並包含在 POST 請求中。以下程式碼示範如何取得和合併這些值:
<code class="java">Document loginForm = Jsoup.connect("https://www.capitaliq.com/CIQDotNet/Login.aspx/login.php") .method(Connection.Method.GET) .execute() .parse(); String viewState = loginForm.select("input[id=__VIEWSTATE]").first().attr("value"); String eventValidation = loginForm.select("input[id=__EVENTVALIDATION]").first().attr("value"); org.jsoup.nodes.Document 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>
此外,建議在GET 和POST 請求中設定userAgent 字段,以確保您收到與使用瀏覽器相同的伺服器回應.
要在登入期間啟用「記住我」功能,請將以下行合併到POST 請求中:
<code class="java">.data("myLogin$myEnableAutoLogin", "on")</code>
以上是如何解決Jsoup中由於缺少參數導致登入表單提交錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!