Изо всех сил пытается получить cookie из ответа с помощью HttpClient in.net 4.5
у меня есть следующий код, который успешно работает. Я не могу понять, как получить печенье из ответа. Моя цель состоит в том, что я хочу иметь возможность устанавливать куки в запросе и получать куки из ответа. Мысли?
private async Task<string> Login(string username, string password)
{
try
{
string url = "http://app.agelessemail.com/account/login/";
Uri address = new Uri(url);
var postData = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("username", username),
new KeyValuePair<string, string>("password ", password)
};
HttpContent content = new FormUrlEncodedContent(postData);
var cookieJar = new CookieContainer();
var handler = new HttpClientHandler
{
CookieContainer = cookieJar,
UseCookies = true,
UseDefaultCredentials = false
};
var client = new HttpClient(handler)
{
BaseAddress = address
};
HttpResponseMessage response = await client.PostAsync(url,content);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync();
return body;
}
catch (Exception e)
{
return e.ToString();
}
}
вот полный ответ:
HttpResponseMessage response = await client.PostAsync(url,content);
response.EnsureSuccessStatusCode();
Uri uri = new Uri(UrlBase);
var responseCookies = cookieJar.GetCookies(uri);
foreach (Cookie cookie in responseCookies)
{
string cookieName = cookie.Name;
string cookieValue = cookie.Value;
}
2 ответа:
чтобы добавить файлы cookie в запрос, заполните контейнер cookie перед запросом с помощью
CookieContainer.Add(uri, cookie)
. После выполнения запроса контейнер cookie будет автоматически заполнен всеми файлами cookie из ответа. Затем вы можете вызвать GetCookies (), чтобы вернуть их.CookieContainer cookies = new CookieContainer(); HttpClientHandler handler = new HttpClientHandler(); handler.CookieContainer = cookies; HttpClient client = new HttpClient(handler); HttpResponseMessage response = client.GetAsync("http://google.com").Result; Uri uri = new Uri("http://google.com"); IEnumerable<Cookie> responseCookies = cookies.GetCookies(uri).Cast<Cookie>(); foreach (Cookie cookie in responseCookies) Console.WriteLine(cookie.Name + ": " + cookie.Value); Console.ReadLine();
вы можете легко получить значение cookie с заданным URL.
private async Task<string> GetCookieValue(string url, string cookieName) { var cookieContainer = new CookieContainer(); var uri = new Uri(url); using (var httpClientHandler = new HttpClientHandler { CookieContainer = cookieContainer }) { using (var httpClient = new HttpClient(httpClientHandler)) { await httpClient.GetAsync(uri); var cookie = cookieContainer.GetCookies(uri).Cast<Cookie>().FirstOrDefault(x => x.Name == cookieName); return cookie?.Value; } } }