2009-06-24 24 views
4

CookieContainerを使用して、いくつかのHttpWebRequestsとHttpWebResponsesを連鎖させています。HttpWebRequestとHttpWebResponse:連続したクエリのログイン要求の状態を維持する

コードは、クッキー情報を設定する3つの異なる「同意」ページを通過するユーザーをシミュレートし、ユーザー名とパスワードで4番目にログインし、応答を文字列として返すPOST(検索)を行います。

HttpWebRequestオブジェクトを「ログイン」して、ユーザーが検索を実行するたびにこれらの手順を実行しないようにする方法はありますか?

静的に設定することはできますか?ヌルまたはCookie情報がない場合は、すべての手順を実行できます。そうでない場合は、ユーザーが必要とする投稿を行います。これの良いパターンは何ですか?

+0

重複しているhttp://stackoverflow.com/questions/1027574/https-c-post? – RobV

答えて

5

ログインするサーバーが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にそれを追加すればうまくいくはずです。 :-)

+0

ありがとう、私はnullまたはクッキーが0のときにログインする静的なCookieContainerを使用しています。 Cookieが期限切れになったか、何らかの理由で無効になったかどうかを確認して、再度ログインしてcookieContainerを再保存する必要があることを確認するにはどうすればよいですか? – CRice

+0

私はこれに関する別の質問を投稿しました: http://stackoverflow.com/questions/1041851/how-to-determine-session-timeout-using-when-reusing-cookiecontainer – CRice

関連する問題