CookieContainer путаница

Из того, что я понимаю, основное использование CookieContainer для сохранения файлов cookie через HttpWebRequests заключается в следующем:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
CookieContainer cookies = new CookieContainer();
request.CookieContainer = cookies;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
  // Do stuff with response
}

затем:

request = (HttpWebRequest)WebRequest.Create(new url);
request.CookieContainer = cookies;
etc...

Но мне трудно понять логику этого процесса. Переменные куки, похоже, нигде не переназначены после инициализации. Как именно куки из первого WebResponse переносятся во второй WebRequest?

1 ответ

Решение

Это потому, что когда вы получаете ответ с веб-сайта, он автоматически заполняет контейнер cookie, который вы использовали для запроса. Вы можете проверить это, увидев, какие куки присутствуют до и после ответа:

//Build the request
Uri site = new Uri("http://www.google.com");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(site);
CookieContainer cookies = new CookieContainer();
request.CookieContainer = cookies;

//Print out the number of cookies before the response (of course it will be blank)
Console.WriteLine(cookies.GetCookieHeader(site));

//Get the response and print out the cookies again
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    Console.WriteLine(cookies.GetCookieHeader(site));
}

Console.ReadKey();
Другие вопросы по тегам