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

Max*_*sky 24 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中找到,但有解析它的直接路径吗?谢谢!

Dan*_*ert 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);
}
Run Code Online (Sandbox Code Playgroud)

此代码的输出将是:

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


小智 8

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

只是想发布我的用法 - 希望它在某个时间点帮助某人.我的要求是我需要从第一个http帖子回复发回cookie给第二个http post请求.

第一名:

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

CookieCollection setCookies = cookieJar.GetCookies(request.RequestUri);
Run Code Online (Sandbox Code Playgroud)

第二:

CookieContainer cc = new CookieContainer();
cc.Add(setCookies);    
request.CookieContainer = cc;
Run Code Online (Sandbox Code Playgroud)


小智 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