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,但我已经使用了几天现在阅读它,所以希望答案不是很明显。

Cookies on Windows Phone 8.1 using 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,那么你很可能是,确保你正确地跟踪了所有的流量。希望对大家有所帮助:)