Trouble with Login Form Submission Using Jsoup
The issue with the provided code lies in its inability to successfully log into the website despite using correct login credentials. The code currently retrieves the login page but fails to execute a successful login.
The fundamental problem is that the submission process requires additional parameters beyond the username, password, and cookies. Specifically, the website requires "VIEWSTATE" and "EVENTVALIDATION" values.
Solution
To resolve this issue, these additional values must be retrieved from the response of the first GET request and included in the POST request. The following code demonstrates how to obtain and incorporate these values:
<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>
Additionally, it's recommended to set the userAgent field in both GET and POST requests to ensure you receive the same server responses as you would with a browser.
To enable the "Remember me" feature during login, incorporate the following line into the POST request:
<code class="java">.data("myLogin$myEnableAutoLogin", "on")</code>
The above is the detailed content of How to Resolve Login Form Submission Errors in Jsoup Due to Missing Parameters?. For more information, please follow other related articles on the PHP Chinese website!