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

时间:2009-06-28 21:42:59

标签: c# cookies httpwebrequest httpwebresponse setcookie

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

4 个答案:

答案 0 :(得分:56)

.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

答案 1 :(得分:7)

丹·赫伯特的答案对我帮助很大。感谢您的帮助。

只想发布我的用法 - 希望它在某些时候帮助某人。我的要求是我需要将第一个http帖子回复中的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;

答案 2 :(得分:5)

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

string regexp = "(?<name>[^=]+)=(?<val>[^;]+)[^,]+,?";);
MatchCollection myMatchCollection = Regex.Matches(cookiesStr, regexp);
foreach (Match myMatch in myMatchCollection)
{
string cookieName = myMatch.Groups["name"].ToString();
string cookieVal = myMatch.Groups["val"].ToString();
Cookie cookie = new Cookie(cookieName, cookieVal);
cookies.Add(cookie);
}

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

祝你好运 Elia的

答案 3 :(得分:1)

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

来自第一个回复的Cookie,在302(重定向)状态的情况下不包括'set cookie'作为标头中的Cookie(例如某些会话ID ...)

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

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