ホームページ >バックエンド開発 >PHPチュートリアル >パラメータの欠落による Jsoup でのログイン フォーム送信エラーを解決するにはどうすればよいですか?

パラメータの欠落による Jsoup でのログイン フォーム送信エラーを解決するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-20 13:18:021070ブラウズ

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

Jsoup を使用したログイン フォームの送信に関する問題

提供されたコードの問題は、正しいコードを使用しているにもかかわらず、Web サイトに正常にログインできないことにあります。ログイン認証情報。現在、コードはログイン ページを取得していますが、正常なログインの実行に失敗しています。

根本的な問題は、送信プロセスにユーザー名、パスワード、Cookie 以外の追加パラメーターが必要であることです。具体的には、Web サイトには「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 フィールドを設定することをお勧めします。 .

ログイン時に「Remember me」機能を有効にするには、次の行を POST リクエストに組み込みます:

<code class="java">.data("myLogin$myEnableAutoLogin", "on")</code>

以上がパラメータの欠落による Jsoup でのログイン フォーム送信エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。