Cookies on Windows Phone 8.1 using HttpClient
本文关键字:using HttpClient Phone on Windows Cookies | 更新日期: 2023-09-27 18:11:34
我在theSystem.Net.Http
中使用HttpClient
,但我在处理cookie时遇到了问题。我已经通过其他帖子解释了如何使用HttpClient.
设置cookie,我为HttpClientHandler.CookieHandler
创建了一个CookieContainer
,并使用这个容器来存储cookie。初始化时,它的值显然是0,并且在生成PostAsync
之后,CookieContainer
包含一个cookie。我运行一个foreach
循环来打印值,我得到了一个cookie的值。这一切似乎都在正常工作。
问题是,即使它似乎是我接受cookie的网站重定向到一个页面,告诉我,我不接受cookie。我已经用浏览器检查过了(使其不接受cookie),这是我用HttpClient
得到的确切结果。
我的代码的整体功能是给登录值,并尝试张贴这些。登录似乎如预期的那样工作,虽然它重定向我告诉我我不接受cookie -即使我的CookieContainer
确实包含一个cookie。我不确定哪里出了问题,但似乎网站看不到我实际上接受cookie。我试过设置httpClientHandler.UseCookies = true;
,但没有任何差异。我想访问的网站是我们大学的阅读成绩系统,我无法访问它的任何编码。
{
var httpClientHandler = new HttpClientHandler();
//Creating cookiecontainer and printing Count for debug purpose
var cookieContainer = new CookieContainer();
Debug.WriteLine("Cookies " + cookieContainer.Count);
httpClientHandler.CookieContainer = cookieContainer;
var httpClient = new HttpClient(httpClientHandler);
HttpResponseMessage response = await httpClient.PostAsync(url, new FormUrlEncodedContent(values));
Debug.WriteLine("Response code" + response.StatusCode);
Debug.WriteLine("Response: " + response.IsSuccessStatusCode);
response.EnsureSuccessStatusCode();
string content = await response.Content.ReadAsStringAsync();
//Print amount of cookies after PostAsync - Should contain cookie now
Debug.WriteLine("Cookies " + cookieContainer.Count);
//Printing the values of the added cookies
foreach (Cookie cookie in cookieContainer.GetCookies(new Uri(url)))
{
Debug.WriteLine("Cookie contains: " + cookie.Value.ToString());
}
}
这是我的第一个Windows Phone应用程序,这是我第一次使用HttpClient
,但我已经使用了几天现在阅读它,所以希望答案不是很明显。
我用chrome浏览器跟踪网站解决了这个问题。我意识到登录页面在我第一次进入页面时给了我2个cookie,在我登录时给了我1个cookie。该场景可以这样描述
- Get loginPage - 2 cookies
- Post LoginPage - 1 cookie
问题是,我开始做一个httpClient.PostAsync
登录。在登录时,我丢失了前2个cookie。
我解决了它通过做一个httpClient。然后,我得到了总共需要的3个cookie。
HttpResponseMessage responseGet = await httpClient.GetAsync(User.School.Url);
HttpResponseMessage responsePost = await httpClient.PostAsync(User.School.Url, new FormUrlEncodedContent(values));
这个问题可能是由于我对饼干缺乏了解造成的。如果网站回应说你丢失了cookie,那么你很可能是,确保你正确地跟踪了所有的流量。希望对大家有所帮助:)