HttpClient不在CookieContainer中存储cookie
我正在使用VS2010
+ .NET 4.0
+ System.Net.Http
(来自Nuget
)。
由于我无法理解的原因,我在HttpResponseMessage
收到的会话cookie不会自动保存在HttpClient CookieContainer
。 这是我的代码的样子:
CookieContainer cookies = new CookieContainer(); HttpClientHandler handler = new HttpClientHandler(); handler.CookieContainer = cookies; HttpClient client = new HttpClient(handler); Uri site = new Uri("https://www.mywebsite.com"); var response1 = client.SendAsync(new HttpRequestMessage(HttpMethod.Get,site)).Result;
我可以在响应头中看到我有以下内容:
Set-Cookie: JSESSIONID=FC8110E434C2C6DAB78B4E335024A639; Path=/member; Secure
但是我的cookie容器仍然是空的…为什么?
我想问题是你的cookie是安全的 。 问题是,CookieContainer不会在后续HTTP请求中将安全cookie发送回服务器。 它可能是一个错误,或者它背后有一些原因。
解决方法是手动将cookie重新添加到CookieContainer。 这样,cookie将在HTTP请求标头中发回,因为当您将cookie发送回服务器时,不会定义安全性 。
有关更多信息,请参阅此文章 。
使用这段代码从响应中检索cookie:
/// /// Read web cookies /// public static CookieContainer ReadCookies(this HttpResponseMessage response) { var pageUri = response.RequestMessage.RequestUri; var cookieContainer = new CookieContainer(); IEnumerable cookies; if (response.Headers.TryGetValues("set-cookie", out cookies)) { foreach (var c in cookies) { cookieContainer.SetCookies(pageUri, c); } } return cookieContainer; }
也许问题是您的请求Url路径是网站的根目录(“/”),但您的Set-Cookie标头指示路径为“/ member”。