24

ASP.NET Web サイトで HttpWebRequest/HttpWebResponse セッションを作成して、後で URL パラメーターを介して HTML フォームを解析しようとしています (この部分は方法を知っています) が、次のような Cookie を解析して設定する方法がわかりません。セッション ID。FiddlerではURLの/パスへのリクエストに対するレスポンスでSet-Cookie経由でASP.NETのSession IDが返ってくることが示されていますが、どうすればこのセッションIDを抽出して次回のHttpWebRequestのCookieとして設定することができるでしょうか。 ? この Set-Cookie ヘッダーが HttpWebResponse.Headers.Keys にあることは理解していますが、それを解析するための直接的な方法はありますか? ありがとう!

4

4 に答える 4

58

.NET フレームワークが Cookie を管理します。ヘッダーから Cookie 情報を解析したり、要求に Cookie ヘッダーを追加したりする必要はありません。

セッション ID を保存して送信するには、 クラスCookieCookieContainerクラスを使用してそれらを保存し、すべてのリクエストで Cookie を送信するようにします。

次の例は、これを行う方法を示しています。CookieContainer ' cookieJar' は、複数のドメインとリクエストで共有できます。リクエスト オブジェクトに追加すると、レスポンスが返されたときに、それへの参照もレスポンス オブジェクトに追加されます。

CookieContainer cookieJar = new CookieContainer();

var request = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com");
request.CookieContainer = cookieJar;

var response = request.GetResponse();

foreach (Cookie c in cookieJar.GetCookies(request.RequestUri))
{
    Console.WriteLine("Cookie['" + c.Name + "']: " + c.Value);
}

このコードの出力は次のようになります。

Cookie['PREF']: ID=59e9a22a8cac2435:TM=1246226400:LM=1246226400:S=tvWTnbBhK4N7Tlpu

于 2009-06-28T22:01:37.033 に答える
8

Dan Herbert からの回答は本当に役に立ちました。私はあなたの助けに感謝します。

私の使用法を投稿したいだけです-ある時点で誰かに役立つことを願っています. 私の要件は、最初の http ポスト応答から 2 番目の http ポスト要求に Cookie を送り返す必要があることです。

1位:

CookieContainer cookieJar = new CookieContainer();
request.CookieContainer = cookieJar;
....

CookieCollection setCookies = cookieJar.GetCookies(request.RequestUri);

2番目:

CookieContainer cc = new CookieContainer();
cc.Add(setCookies);    
request.CookieContainer = cc;
于 2009-12-24T22:30:08.577 に答える
5

私は同じ問題を抱えています(Amazonで)次の正規表現を使用します:

string regexp = "(?<name>[^=]+)=(?<val>[^;]+)[^,]+,?";); 
MatchCollection myMatchCollection = Regex.Matches(cookiesStr, regexp);
foreach (myMatchCollection の myMatch に一致)
{
string cookieName = myMatch.Groups["name"].ToString();
string cookieVal = myMatch.Groups["val"].ToString();
Cookie cookie = new Cookie(cookieName, cookieVal);
cookies.Add(クッキー);
}

私はクッキーの名前/値だけを気にすることに注意してください...

頑張れエリア

于 2010-05-12T12:17:35.537 に答える
1

うーん、私は間違っているかもしれませんが、最近観察していることから

最初の応答からの Cookie は、302 (リダイレクト) ステータスの場合、ヘッダー (たとえば、セッション ID など) に含まれる Cookie として「set Cookie」を含めません。

autofollowredirect が true に設定されている場合、設定された Cookie が処理され、自動的に行われる後続のリクエストには、最初の呼び出しで設定された Cookie によって定義された Cookie が含まれます。

autofollowredirect が false に設定されている場合、最初のリクエストは設定された Cookie によって配置された Cookie を取得しません。また、次のリクエストでこれらの Cookie を後で保持する唯一の方法が解析であることを誰かが知っている場合、これも私の疑問です。セットのクッキー?

于 2010-01-17T23:35:07.587 に答える