And*_*rew 2 c# cookies httpclient fiddler uwp
运行UWP应用*
所以我有一个HttpClient及其关联的处理程序。我正在向网站发出请求,传入指定的标头,并使用指定的CookieContainer,该Cookie在请求开始时为空。
当我发送请求时,Fiddler显示正在发送的其他我尚未添加的Cookie。他们来自哪里?
CookieContainer cookieJar = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler( );
handler.UseDefaultCredentials = false;
handler.CookieContainer = cookieJar;
handler.Proxy = null;
using (var client = new HttpClient(handler as HttpClientHandler))
{
HttpResponseMessage response = new HttpResponseMessage();
String loginUrl = Const.BUNGIE_LOGIN_URI + (provider == Const.XBOX_PLATFORM ? Const.XBOX_LOGIN : Const.PS_LOGIN);
client.BaseAddress = new Uri(loginUrl);
//client.Timeout = new TimeSpan(0, 0, 0, 0, 450);
client.DefaultRequestHeaders.Add("Referer", "http://www.bungie.net");
client.DefaultRequestHeaders.Add("User-Agent", Const.USERAGENT);
client.DefaultRequestHeaders.Add("X-API-Key", Const.X_API_KEY);
client.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("Accept-Language", "en-GB,en-US;q=0.8,en;q=0.6");
handler.AutomaticDecompression = DecompressionMethods.GZip;
response = client.GetAsync("").Result;
response.ReadCookies(); //adds cookies to cookieJar
}
Run Code Online (Sandbox Code Playgroud)
现在,由于关联CookieContainer是空的,所以在发出请求之前,这些cookie是从哪里来的?他们可以到达吗?如果我想从中获得价值,我将如何获得它们?
编辑:它们是从哪里添加到我的HttpClient请求的?HttpClient是否具有通用的CookieContainer /缓存?我有两个单独的HttpClient实例,当客户端(A)发出请求时,它收到一个返回的“ set-cookie”标头,设置了一个“乱七八糟”的cookie。
稍后,HttpClient的一个单独实例客户端(B)向同一网站发出请求,发送客户端(A)中的cookie集。
我没有将此Cookie明确附加到客户(B)的请求中,那么如何添加它呢?
在Windows 10内部版本10240上,它System.Net.Http.HttpClient是Windows.Web.Http.HttpClient(在此处的更多信息)的包装,因此cookie的工作原理现在有所不同。
要删除这些多余的cookie,您将需要使用删除cookie HttpCookieManager:
HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
HttpCookieManager cookieManager = filter.CookieManager;
foreach (HttpCookie cookie in cookieManager.GetCookies(uri))
{
cookieManager.DeleteCookie();
}
Run Code Online (Sandbox Code Playgroud)