用httpclient获取到的cookie不完整是怎么回事

2025-04-28 08:15:43
推荐回答(1个)
回答1:

HttpWebResponse 的 Cookies 属性所填充的 Cookie 和 HttpWebResponse 的 Headers 中填充的 Cookie 是从原始的响应中直接解析出来的,也就是相应里有啥,这里就有啥,所以是 3;而 HttpWebRequest 的 CookieContainer 中的 Cookie 是对前面的 Cookies 中的 Cookie 经过一些分类(比如域名分类)和判断(比如是否过期)后才填充的,所以它的数量不一定同原始的 Cookie 数量相同。

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.baidu.com");
request.CookieContainer = new CookieContainer();

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

// response.Cookies.Count 这个是 3
// request.CookieContainer.Count 这个是 2

如果用 HttpClient 的话,HttpClientHandler 的 CookieContainer.Count 应该也是 2,如果要获取所有 3 个 Cookie 的话,使用 Task GetAsync(Uri requestUri),然后从 HttpResponseMessage 的 Headers.GetValues("Set-Cookie") 可以取到所有 3 个。