Pertanyaan Berjuang mencoba untuk mendapatkan cookie dari respon dengan HttpClient di .net 4.5


Saya punya kode berikut yang berhasil bekerja. Saya tidak tahu cara mengeluarkan cookie dari respons. Tujuan saya adalah bahwa saya ingin dapat mengatur cookie dalam permintaan dan mengeluarkan cookie dari respons. Pikiran?

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

Inilah jawaban lengkapnya:

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

75
2017-11-10 00:48


asal


Jawaban:


Untuk menambahkan cookie ke permintaan, isi wadah cookie sebelum permintaan dengan CookieContainer.Add(uri, cookie). Setelah permintaan dibuat, wadah cookie secara otomatis akan diisi dengan semua cookie dari respons. Anda kemudian dapat memanggil GetCookies () untuk mengambilnya kembali.

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

132
2017-11-10 01:05