如何解析HttpWebResponse.Headers.Keys返回的Set-Cookie会话ID

我正在尝试使用ASP.NET网站创建一个HttpWebRequest / HttpWebResponse会话,以便稍后通过url params解析HTML表单(这部分我知道该怎么做),但我不明白如何解析和设置cookie如会话ID。 在Fiddler中,它显示ASP.NET会话ID是在对URL的/ path请求的响应中通过Set-Cookie返回的,但是如何提取此会话ID并将其设置为下一个HttpWebRequest的cookie ? 我知道这个Set-Cookie标头可以在HttpWebResponse.Headers.Keys中找到,但有解析它的直接路径吗? 谢谢!

.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

Dan Herbert的答案对我帮助很大。 我感谢您的帮助。

只是想发布我的用法 – 希望它在某个时间点帮助某人。 我的要求是我需要从第一个httppost回复发回cookie到第二个http post请求。

第一名:

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

第二:

 CookieContainer cc = new CookieContainer(); cc.Add(setCookies); request.CookieContainer = cc; 

我有同样的问题(与亚马逊)我使用以下正则表达式:

  string regexp =“(? [^ =] +)=(? [^;] +)[^,] +,?”;;); 
MatchCollection myMatchCollection = Regex.Matches(cookiesStr,regexp);
foreach(在myMatchCollection中匹配myMatch)
{
string cookieName = myMatch.Groups [“name”]。ToString();
string cookieVal = myMatch.Groups [“val”]。ToString();
Cookie Cookie =新Cookie(cookieName,cookieVal);
cookies.Add(cookies);
}

请注意,我只关心cookie名称/值…

祝你好运Elia

哼哼我可能是错的,但最近我观察到的

来自第一个响应的Cookie,在302(重定向)状态的情况下,不包括标题中包含的’set cookie’(例如某些会话ID …)

如果autofollowredirect设置为true,则处理set cookie,并且自动完成的后续请求将包括第一次调用时set cookie定义的cookie

如果autofollowredirect设置为false,那么第一个请求不会获得由设置cookie定位的cookie,我猜这也是我的任务,如果有人知道,在下一个请求中随后拥有这些cookie的唯一方法是解析设置cookies?