Mam następujący kod, który działa pomyślnie. Nie mogę dowiedzieć się, jak wyjąć plik cookie z odpowiedzi. Moim celem jest to, aby móc ustawić pliki cookie w żądaniu i uzyskać pliki cookie z odpowiedzi. Myśli?
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();
}
}
Oto pełna odpowiedź:
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;
}
c#
async-await
dotnet-httpclient
Peter Kellner
źródło
źródło
Odpowiedzi:
Aby dodać pliki cookie do żądania, wypełnij kontener plików cookie przed żądaniem za pomocą
CookieContainer.Add(uri, cookie)
. Po wysłaniu żądania kontener plików cookie zostanie automatycznie wypełniony wszystkimi plikami cookie z odpowiedzi. Następnie możesz wywołać GetCookies (), aby je odzyskać.źródło
httpclient
są zbudowane z fabryki httpclient? tj. metoda konstruktora dodana do services.AddHttpClientIstnieje alternatywa, jeśli nie masz dostępu do
HttpClient
i nie możesz wstrzyknąć plikuCookieContainer
. Działa to w .NET Core 2.2:źródło
Możesz łatwo uzyskać wartość cookie z podanym adresem URL.
źródło