Как мне сделать HTTP-запрос, используя куки на UWP? - PullRequest
0 голосов
/ 11 сентября 2018

Я хотел бы сделать http-запрос к удаленному серверу при правильной обработке файлов cookie (например, хранение файлов cookie, отправленных сервером, и отправка этих файлов cookie при последующих запросах). Было бы неплохо сохранить все файлы cookie

1 Ответ

0 голосов
/ 11 сентября 2018

Встроенный Windows.Web.Http.HttpClient может управлять файлами cookie, если вы передаете экземпляр HttpBaseProtocolFilter его конструктору. В этом классе есть свойство CookieManager, которое содержит файлы cookie, и вы даже можете изменить его и добавить свои собственные файлы cookie для следующих запросов.

Однако вместо этого вы должны ссылаться на пакет System.Net.Http NuGet и использовать его HttpClient, который всегда актуален и регулярно обновляется. В этом случае класс HttpClient принимает экземпляр HttpClientHandler в своем конструкторе, и этот класс, в свою очередь, имеет свойство CookieContainer, которое работает аналогично CookieManager в Windows.Web.Http.

System.Net.Http.HttpClient

Отправить пользовательский файл cookie

var handler = new HttpClientHandler()
{
    CookieContainer = new System.Net.CookieContainer(),
    UseCookies = true
};
var client = new System.Net.Http.HttpClient(handler);
handler.CookieContainer.Add(targetUri, new System.Net.Cookie("name", "value"));
var response = await client.GetAsync(targetUri);

Получить печенье

var cookie = handler.CookieContainer["name"];

Windows.Web.Http.HttpClient

Отправить пользовательский файл cookie

var filter = new Windows.Web.Http.Filters.HttpBaseProtocolFilter()
{
    CookieUsageBehavior = Windows.Web.Http.Filters.HttpCookieUsageBehavior.Default
};
filter.CookieManager.SetCookie(new Windows.Web.Http.HttpCookie("name", "domain", "path")
{
    Value = "value"
});
var client =  new Windows.Web.Http.HttpClient(filter);
var response = await client.GetAsync(targetUri);

Получить печенье

var cookie = filter.CookieManager.GetCookies(targetUri).
              FirstOrDefault(cookie => cookie.Name == "name");
...