HttpWebRequestおよびHttpWebResponse:連続したクエリのログインリクエストの状態を維持する
-
10-07-2019 - |
質問
CookieContainerを使用して、いくつかのHttpWebRequestsとHttpWebResponsesがチェーン接続されています。
このコードは、Cookie情報を設定する3つの異なる「同意する」ページを通過し、4番目にユーザー名とパスワードでログインし、5番目にPOST(検索)を実行して応答を文字列として返すユーザーをシミュレートします。
ユーザーが検索を実行するたびにこれらの手順を実行することを回避するために、HttpWebRequestオブジェクトを「ログイン済み」として維持する方法はありますか?
静的として設定できますか?そのヌルまたはCookie情報がない場合、すべての手順を実行できますが、そうでない場合はユーザーが必要とする投稿のみを実行できますか?これに適したパターンは何ですか?。
解決
ログインするサーバーがCookieベースの認証を使用する場合、認証Cookieを保存するSystem.Net.CookieContainerを作成する必要があります。これは非常に簡単です:
CookieContainer container = new CookieContainer();
// Create web request
request.CookieContainer = container;
// Create next web request
nextRequest.CookieContainer = container;
// And so on
...
すべてのHttpWebRequestオブジェクトに対してCookieContainerオブジェクトを再利用し、後で使用できるようにメモリに保持します。
CookieContainerはシリアル化可能であるため、必要に応じてディスク上に永続化できます。これにより、ユーザーがアプリケーションを再起動した場合でもCookieを保持できます。
別の方法として、ページがCookieを使用せず、代わりにURLにセッションIDを格納する場合、目的のページのURLにセッションIDを渡す必要があります。 URLに追加するだけで機能します。 :-)
所属していません StackOverflow