web-dev-qa-db-ja.com

返されたSet-CookieセッションIDのHttpWebResponse.Headers.Keysを解析する方法

ASP.NETWebサイトでHttpWebRequest/HttpWebResponseセッションを作成して、後でurlパラメーターを使用してHTMLフォームを解析しようとしています(この部分は実行方法を知っています)が、次のようなCookieを解析および設定する方法がわかりません。セッションID。 Fiddlerでは、URLの/パスへの要求への応答でASP.NETセッションIDがSet-Cookieを介して返されることを示していますが、このセッションIDを抽出して、次のHttpWebRequestのCookieとして設定するにはどうすればよいですか? ?このSet-CookieヘッダーがHttpWebResponse.Headers.Keysにあることを理解していますが、それを解析するための直接的なパスはありますか?ありがとう!

24
Maxim Zaslavsky

.NETFrameworkがCookieを管理します。ヘッダーからCookie情報を解析したり、リクエストにCookieヘッダーを追加したりする必要はありません。

セッションIDを保存して送信するには、 Cookie クラスと CookieContainer クラスを使用してそれらを保存し、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

57
Dan Herbert

ダンハーバートからの答えは本当に助けになりました。私はあなたの助けに感謝します。

私の使用法を投稿したいだけです-それがいつか誰かに役立つことを願っています。私の要件は、最初のhttppost応答から2番目のhttppost要求に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;
8
user238397

私は(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(cookie); 
}

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

頑張ってエリア

5
Elia

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

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

Autofollowredirectがtrueに設定されている場合、設定されたCookieが処理され、自動的に実行される後続の要求には、最初の呼び出しで設定されたCookieによって定義されたCookieが含まれます。

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

1
Kriss