首頁 >後端開發 >php教程 >如何解決Jsoup中由於缺少參數導致登入表單提交錯誤?

如何解決Jsoup中由於缺少參數導致登入表單提交錯誤?

Linda Hamilton
Linda Hamilton原創
2024-10-20 13:18:021074瀏覽

How to Resolve Login Form Submission Errors in Jsoup Due to Missing Parameters?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn