我正在尝试使用 ASP.NET 网站创建一个 HttpWebRequest/HttpWebResponse 会话,以便稍后通过 url 参数解析 HTML 表单(这部分我知道该怎么做),但我不明白如何解析和设置 cookie,例如会话 ID。在Fiddler中,它显示ASP.NET Session ID是通过Set-Cookie在对url的/路径的请求的响应中返回的,但是我怎样才能提取这个session id并将其设置为下一个HttpWebRequest的cookie ? 我知道这个 Set-Cookie 标头可以在 HttpWebResponse.Headers.Keys 中找到,但是有解析它的直接路径吗?谢谢!
4 回答
.NET 框架将为您管理 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
Dan Herbert 的回答对我很有帮助。我感谢您的帮助。
只是想发布我的用法-希望它在某个时间点对某些人有所帮助。我的要求是我需要将 cookie 从第一个 http post 响应发送回第二个 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;
我有同样的问题(亚马逊)我使用以下正则表达式:
字符串正则表达式 = "(?<name>[^=]+)=(?<val>[^;]+)[^,]+,?";);
MatchCollection myMatchCollection = Regex.Matches(cookiesStr, regexp);
foreach(在 myMatchCollection 中匹配 myMatch)
{
string cookieName = myMatch.Groups["name"].ToString();
字符串 cookieVal = myMatch.Groups["val"].ToString();
Cookie cookie = 新 Cookie(cookieName, cookieVal);
cookies.Add(cookie);
}
请注意,我只关心 cookie 名称/值...
祝你好运埃利亚
嗯,我可能错了,但根据我最近的观察
来自第一个响应的 cookie,在 302(重定向)状态的情况下,不包含“设置 cookie”作为标题中的 cookie(例如某些会话 id ...)
如果 autofollowredirect 设置为 true,则处理设置的 cookie,并且自动完成的后续请求将包括在第一次调用时由设置 cookie 定义的那些 cookie
如果 autofollowredirect 设置为 false,那么第一个请求不会获得由设置的 cookie 定位的 cookie,我猜这也是我的问题,如果有人知道,那么随后在下一个请求中拥有这些 cookie 的唯一方法是解析设置的饼干?