121 votes

Difficulté à obtenir une réponse du cookie avec HttpClient dans .net 4.5

J'ai le code suivant qui fonctionne avec succès. Je ne peux pas comprendre comment obtenir le cookie de la réponse. Mon but est que je veux être en mesure de placer des cookies dans la demande et d'obtenir des biscuits de la réponse. Pensées?

    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();
        }
    }

Voici la réponse:

            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;
            }

200voto

Despertar Points 5365

Pour ajouter des cookies à une demande, remplir le cookie contenant avant de le demander avec CookieContainer.Add(uri, cookie). Après la demande en est faite, le cookie contenant sera automatiquement renseignée avec tous les cookies de la réponse. Vous pouvez ensuite appeler GetCookies() pour les retrouver.

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();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X