Как использовать куки (Cookies) при запросе с помощью HttpWebRequest? - CodeHelper

Как использовать куки (Cookies) при запросе с помощью HttpWebRequest?

1

Я использую HttpWebRequest для программного запроса веб-страницы. Требуется выполнить два запроса. При осуществлении первого запроса сервер создает куки, которые нужно использовать во время второго запроса. Как реализовать сохранение cookies между запросами?

Новые ответы


2

Делает запрос на сайт, получает куки. Делает на тот же сайт запрос (второй раз) с полученными ранее куками и получает новые куки.

HttpWebRequest h1 = (HttpWebRequest) WebRequest.Create("http://site.ru");
h1.AllowAutoRedirect = false;
CookieContainer cc = new CookieContainer();
h1.CookieContainer = cc;
HttpWebResponse r1 = (HttpWebResponse)h1.GetResponse();
foreach (Cookie c in r1.Cookies)
{
    textBox1.Text += "\r\n cook1:" + c;
    cc.Add(c);
}
HttpWebRequest h2 = (HttpWebRequest)WebRequest.Create("http://site.ru");
h2.AllowAutoRedirect = false;
h2.CookieContainer = cc;
HttpWebResponse r2 = (HttpWebResponse)h2.GetResponse();
foreach (Cookie c in r2.Cookies)
    textBox1.Text += "\r\n cook2:" + c;

Естественно создавать второй request не обязательно

CookieContainer cookies = new CookieContainer();
HttpWebRequest postRequest = (HttpWebRequest)WebRequest.Create(site);
postRequest.CookieContainer = cookies; // note this
postRequest.Method = "POST";
postRequest.ContentType = "application/x-www-form-urlencoded";
using (Stream stream = postRequest.GetRequestStream())
{
    stream.Write(buffer, 0, buffer.Length);
}
Korvin

Сделал как в примере, вот код:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.AllowAutoRedirect = false;
CookieContainer _cooks = new CookieContainer();
request.CookieContainer = _cooks;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

foreach (Cookie c in response.Cookies)
{
    _cooks.Add(c);
}

Но в куках всегда пусто, почему?


v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.