2016-02-01 6 views
1

Мне нужна помощь с новым классом Windows.Web.Http.HttpClient. Я пишу свое первое приложение WP8.1 прямо сейчас, и это сводит меня с ума. Я вхожу на такой сайт:Windows.Web.Http.HttpClient: Получение файлов cookie и их сохранение

var values = new Dictionary<string, string>(); 
values.Add("login_username", _username); 
values.Add("login_password", _password); 
values.Add("login_lifetime", "36000"); 

var parameters = new HttpFormUrlEncodedContent(values); 
var response = await Forum.Http.PostAsync(new Uri("http://foo.bar.xyz"), parameters); 

var buffer = await response.Content.ReadAsBufferAsync(); 
byte[] byteArray = buffer.ToArray(); 
string content = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length); 

if (content.Contains("Wrong password/user name")) 
{ 
     return false; 
} 

return true; 

И это работает очень хорошо. Мой HttpClient статическое поле, как это:.

public static HttpBaseProtocolFilter Filter = new HttpBaseProtocolFilter(); 
public static HttpClient Http = new HttpClient(Filter); 

Войти работает просто отлично, но не сохраняет куки сайт посылаемые после входа в систему Как я могу сохранить их и я могу послать их к сайт на каждом GetAsync()?

ответ

0

Вы можете использовать HttpClientHandler вместо HttpBaseProtocolFilter. Если вы должны использовать HttpBaseProtocolFilter, тогда есть свойство CookieManager только для чтения типа HttpCookieManager, которое могло бы вам помочь.

Вот пример использования HttpClientHandler:

public static CookieContainer Cookies = new CookieContainer(); 
public static HttpClientHandler HttpClientHandler = new HttpClientHandler() { CookieContainer = Cookies }; 
public static HttpClient Http = new HttpClient(HttpClientHandler); 

После вашего PostAsync) возвращает (колл, вы можете извлечь печенье

var uri = new Uri("http://foo.bar.xyz"); 
var response = await Forum.Http.PostAsync(uri, parameters); 
IEnumerable<Cookie> responseCookies = Cookies.GetCookies(uri).Cast<Cookie>(); 
foreach (Cookie cookie in responseCookies) { 
    Console.WriteLine(cookie.Name + ": " + cookie.Value); 
} 

Если вы хотите повторно использовать печенье из первоначальный запрос, вы можете создать свой собственный CookieContainer и скопировать cookie из файлов cookie ответов. Или - вы можете также добавить жестко печенье, как это:

Cookies.Add(new HttpCookie("Name", "Value") { Domain="http://foo.bar.xyz" }); 
+0

Насколько я знаю Windows.Web.Http.HttpClient не использует HttpClientHandler. Я ошибаюсь? –

+0

Я реализовал ваше решение (вместо этого пришлось использовать System.Net.Http.HttpClient). Все по-прежнему работает нормально. Но он не получит или не сохранит файлы cookie. Мой CookieContainer по-прежнему пуст. Это действительно сводит меня с ума. –

Смежные вопросы