Recuperare manualmente i cookie nelle chiamate Http (C#)

Recuperare manualmente i cookie nelle chiamate Http (C#)

Ultimamente ho riscontrato un problema con i Cookie durante l’uso delle chiamate Http da una Windows Application fatta in C#. Normalmente una chiamata Http viene fatta nella seguente modalità:

CookieContainer myCookieContainer = new CookieContainer();
...

HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);

myRequest.CookieContainer = myCookieContainer;
myRequest.Credentials = CredentialCache.DefaultCredentials;
myRequest.Method = "GET";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.Timeout = 60000;
myRequest.KeepAlive = true;
myRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1";

System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();

HttpWebResponse myHttpWebResponse = (HttpWebResponse)myRequest.GetResponse();

Stream streamResponse = myHttpWebResponse.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);

String resultHttp = streamRead.ReadToEnd();

streamRead.Close();
streamResponse.Close();
myHttpWebResponse.Close();

 

Facendo il settaggio del CookieContainer nell’istanza della classe HttpWebRequest, facciamo in modo che qualunque cookie venga inserito dalla pagina in cui stiamo navigando venga anche inserito nella nostra collezione cookieContainer. Purtroppo però non sempre funziona correttamente; mi è infatti successo che un cookie settato dalla pagina non sia stato anche inserito nella mia collection, invalidando quindi tutte le navigazioni seguenti.

La soluzione a questo problema è effettuare un recupero manuale di tutti i cookie settati dalla pagina. Per farlo basta spulciare tra gli Headers della Response, possiamo notare infatti la presenza di un SetCookie, se quindi prendiamo il valore di questo Header avremo a disposizione ciò di cui abbiamo bisogno! Per fare ciò è necessaria la seguente riga di codice:

String setCookieHeaderValue = myHttpWebResponse.Headers["Set-Cookie"];

 

A questo punto nella nostra variabile setCookieHeaderValue avremo tutti i cookie che sono stati settati, per esempio:

auth_token=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT,auth_token=; path=/,_session=BAh7CToPc2Vzc2lvbl9pZCIlOGE4ZmQ5MjMwOTc1ZmU0MDVhYmI2OTRiM2QwZDYwZTQiCmZsYXNoSUM6J0FjdGlvbkNvbnRyb2; path=/; expires=Sat, 23-Mar-2013 20:30:22 GMT; secure; HttpOnly

 

Estraiamo il cookie “maledetto”, inseriamolo nel nostro cookieContainer, e il gioco è fatto!

cookieContainer.Add(new Cookie(name, value, path, domain));

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *