Как я могу получить куки от HttpClientHandler.CookieContainer - PullRequest
5 голосов
/ 29 ноября 2011

Вот код:

public static async Task<string> DownloadPageWithCookiesAsync(string url)
{
    HttpClientHandler handler = new HttpClientHandler();
    handler.UseDefaultCredentials = true;
    handler.AllowAutoRedirect = true;
    handler.UseCookies = true;
    handler.CookieContainer = new CookieContainer();
    HttpClient client = new HttpClient(handler);
    HttpResponseMessage response = await client.GetAsync(url);
    response.EnsureSuccessStatusCode();

    string responseBody = response.Content.ReadAsString();
    return responseBody;
}

после запуска client.GetAsync(url);, handler.CookieContainer содержит 7 файлов cookie. Как я могу получить к ним доступ?

Ответы [ 4 ]

3 голосов
/ 29 ноября 2011

Попробуйте:

CookieCollection cookies = handler.CookieContainer.GetCookies(new Uri(/*Uri that the cookies are associated with*/));
for(int i = 0; i < cookies.Count; i++)
{
    Cookie c = cookies[i];
    //Do stuff with the cookie.
}

Вы также можете повторить CookieCollection с циклом foreach, я считаю.

3 голосов
/ 29 ноября 2011

Используйте метод GetCookies CookieContainer, указав URI, для которого вы хотите куки. Он возвращает коллекцию Cookie, которую вы можете перечислить.

1 голос
/ 25 февраля 2015
CookieCollection cookies = handler.CookieContainer.GetCookies(/*blah-blah*/);
foreach (var cookie in cookies.OfType<System.Net.Cookie>())
{
    // process cookies
}
1 голос
/ 13 февраля 2012
int loop1, loop2;
HttpCookieCollection MyCookieColl;
HttpCookie MyCookie;

MyCookieColl = Request.Cookies;

// Capture all cookie names into a string array.
String[] arr1 = MyCookieColl.AllKeys;

// Grab individual cookie objects by cookie name.
for (loop1 = 0; loop1 < arr1.Length; loop1++) 
{
   MyCookie = MyCookieColl[arr1[loop1]];
   Response.Write("Cookie: " + MyCookie.Name + "<br>");
   Response.Write ("Secure:" + MyCookie.Secure + "<br>");

   //Grab all values for single cookie into an object array.
   String[] arr2 = MyCookie.Values.AllKeys;

   //Loop through cookie Value collection and print all values.
   for (loop2 = 0; loop2 < arr2.Length; loop2++) 
   {
      Response.Write("Value" + loop2 + ": " + Server.HtmlEncode(arr2[loop2]) + "<br>");
   }
}
...