如何从 HttpResponseMessage 中检索 Cookie



我在帖子请求中发送表单数据,我知道该请求返回cookie,但我的cookie变量返回为空

如您所见,我已经尝试使用 GetCookie,但我想知道我是否可以在收到 200 响应时从我的 PostAsync 响应中过滤出 cookie

CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
HttpClient client = new HttpClient(handler);
HttpContent content = new StringContent(JsonConvert.SerializeObject(formVals), Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync(targetURI.AbsoluteUri , content);
IEnumerable<Cookie> responseCookies = cookies.GetCookies(targetURI).Cast<Cookie>()
foreach (Cookie cookie in responseCookies)
   result.Add(cookie);

我希望 2 个饼干回来并存储在我的回复中饼干容器

你的问题中有一些不清楚的方面:你的cookies变量来自哪里,你的handler变量来自哪里?这些细节对于回答问题很重要。

我可以想到您的代码中可能存在的 2 个错误部分。首先,应将CookieContainer附加到处理程序:

var cookies = new CookieContainer();
var handler = new HttpClientHandler() { CookieContainer = cookies };
var client = new HttpClient(handler);
var content = new StringContent(JsonConvert.SerializeObject(formVals), Encoding.UTF8, "application/json");
var response = await client.PostAsync(targetURI.AbsoluteUri, content);
IEnumerable<Cookie> responseCookies = cookies.GetCookies(targetURI).Cast<Cookie>()
foreach (Cookie cookie in responseCookies)
   result.Add(cookie);

其次(假设您的cookieshandler变量是以这种方式初始化的(,您可能需要获取正确的基址 cookie ( Uri.Host (:

IEnumerable<Cookie> responseCookies = cookies.GetCookies(targetURI.Host).Cast<Cookie>()

如果您完全不确定,请使用此方法(基于反射的深度检查(检查是否设置了cookie,以及它们设置为哪个域。

只是为了让你们知道,问题是我没有对我的表单数据进行编码。将内容更改为以下行。

var content = new FormUrlEncodedContent(formVals);

最新更新