Drazen Bjelovuk Drazen Bjelovuk - 2 months ago 23
C# Question

CookieContainer confusion

From what I understand, the basic use of the CookieContainer to persist cookies through HttpWebRequests is as follows:

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


then:

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


What I don't understand is the logic behind this process. From what I can see, the variable, cookies, has not been reassigned anywhere after its initialization statement. How exactly do the cookies from the first WebResponse carry into the second WebRequest?

Answer

It's because when you retrieve the response from the website, it automatically populates the cookie container you used for the request. You can test this out by seeing what cookies are present before and after the response:

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