【问题标题】:Cookies on Windows Phone 8.1 using HttpClientWindows Phone 8.1 上使用 HttpClient 的 Cookie
【发布时间】:2014-08-25 01:44:57
【问题描述】:

我在theSystem.Net.Http 中使用HttpClient,但在处理cookie 时遇到问题。我已经通过其他帖子解释了如何使用HttpClient. 设置cookie 我为HttpClientHandler.CookieHandler 创建了一个CookieContainer 并将此容器用于cookie。初始化时,它的值显然是0,并且在制作PostAsync之后,CookieContainer包含一个cookie。我通过foreach 循环来打印值,然后我得到了一个cookie 的值。这一切似乎都在正常工作。

问题是,即使看起来我正在接受 cookie,网站也会将我重定向到一个页面,通知我我不接受 cookie。我已经用浏览器进行了检查(使其不接受 cookie),这是我使用HttpClient 得到的确切结果。

我的代码的整体功能是为登录提供值并尝试发布这些值。尽管我的 CookieContainer 确实包含 cookie,但它重定向我告诉我不接受 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,但我已经用了几天时间阅读它,所以希望答案不是很明显。非常感谢 - 非常感谢您的帮助。

【问题讨论】:

    标签: c# cookies httpclient windows-phone-8.1


    【解决方案1】:

    我通过使用 chrome 跟踪网站解决了这个问题。我意识到登录页面在我第一次进入该页面时给了我2个cookie,在我登录时给了我1个cookie。场景可以这样描述

    • 获取 loginPage - 2 个 cookie
    • 登录后页面 - 1 个 cookie

    问题是我开始使用httpClient.PostAsync 进行登录。登录时,我错过了前 2 个 cookie。

    我通过在发布之前执行 httpClient.GetAsync 解决了这个问题,然后我得到了所需的总共 3 个 cookie。

    HttpResponseMessage responseGet = await httpClient.GetAsync(User.School.Url);
    HttpResponseMessage responsePost = await httpClient.PostAsync(User.School.Url, new FormUrlEncodedContent(values));
    

    这个问题可能是由于我对 cookie 缺乏了解造成的。如果网站响应说您缺少 cookie,那么您可能是,请确保您正确跟踪了所有流量。希望这对其他人有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多