Jsoup を使用したログイン フォーム送信の問題の解決
正しいログイン資格情報を送信したにもかかわらず、提供されたコードはユーザーの認証に失敗し、ログイン ページが表示されます。
コードに欠けている重要な側面の 1 つは、VIEWSTATE と EVENTVALIDATION の値が含まれていることです。これらの値は Web サイトのログインに必要で、最初の 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>
さらに、GET リクエストと POST リクエストの両方に userAgent フィールドを追加すると、ブラウザがシミュレートされ、手動ログインで受信した応答との一貫性が確保されます。
オプションで、remember me フィールドを有効にできます。次の行を POST リクエストに追加します:
<code class="java">.data("myLogin$myEnableAutoLogin", "on")</code>
以上がVIEWSTATE 値と EVENTVALIDATION 値を組み込むことで、Jsoup でのログイン フォーム送信の問題を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。