Файлы cookie в Windows Phone 8.1 с использованием HttpClient

#c# #cookies #httpclient #windows-phone-8.1

#c# #файлы cookie #httpclient #windows-phone-8.1

Вопрос:

Я использую HttpClient in theSystem.Net.Http , но у меня возникают проблемы с файлами cookie. Я прочитал другие сообщения, объясняющие, как настроить cookies с помощью HttpClient. I create a CookieContainer для HttpClientHandler.CookieHandler и использовать этот контейнер для cookies. При инициализации его значение, очевидно, равно 0, а после создания PostAsync оно CookieContainer содержит один файл cookie. Я выполняю foreach цикл для печати значений и получаю значение одного файла cookie. Похоже, что все работает так, как должно.

Проблема в том, что, хотя кажется, что я принимаю cookies, веб-сайт перенаправляет меня на страницу, информирующую меня о том, что я не принимаю cookies. Я проверил с помощью браузера (чтобы он не принимал cookies), и это точный результат, который я получаю с моим HttpClient .

Общая функция моего кода — выдавать значения для входа в систему и пытаться опубликовать их. Кажется, что вход в систему работает должным образом, хотя он перенаправляет меня, сообщая, что я не принимаю cookies, хотя мой CookieContainer файл cookie действительно содержит. Я не уверен, где это пошло не так, но, похоже, веб-сайт не видит, что я на самом деле принимаю cookies. Я пробовал настраивать 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 , но я уже несколько дней читаю об этом, поэтому надеюсь, что ответ не слишком очевиден. Большое вам спасибо — мы очень ценим вашу помощь.

Ответ №1:

Я решил проблему, отслеживая веб-сайт с помощью Chrome. Я понял, что страница входа выдавала мне 2 cookie-файла при первом переходе на страницу и 1 cookie-файл при входе в систему. Сценарий может быть описан следующим образом

  • Получить файлы cookie LoginPage — 2
  • Опубликовать страницу входа — 1 файл cookie

Проблема заключалась в том, что я начал с того, что сделал httpClient.PostAsync для входа в систему. При выполнении входа в систему у меня отсутствовали первые 2 cookies.

Я решил это, выполнив HttpClient.Получите синхронизацию перед публикацией, затем я получил всего 3 файла cookie, которые были необходимы.

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

Вероятно, проблема была вызвана моим недостатком знаний о файлах cookie. Если в ответе веб-сайта говорится, что у вас отсутствуют файлы cookie, то, вероятно, так оно и есть, убедитесь, что вы правильно отследили ВЕСЬ трафик. Надеюсь, это может быть полезно кому-то еще 🙂