Практическая задача: получить куки с этого сайта в .Net - PullRequest
0 голосов
/ 27 сентября 2010

У меня здесь практический вопрос.Я должен получить доступ к сайту и получить информацию о файлах cookie, чтобы использовать их при последующей навигации.Я не имею никакого контроля браузера на моей стороне, потому что все должно работать на сервере.С некоторым сайтом задача довольно проста, но есть сайт, который отправляет файлы cookie таким способом, который мне не удается перехватить.

Например, Сайт итальянских автомобильных дорог : Я не могупонять, как они отправляли файлы cookie, и самое главное, как я могу получить эти файлы cookie из приложения .Net.

Я пробовал оба объекта WebClient, просматривая заголовок, следующим образом:

var wc = new WebClient();
var htmlMainPage = wc.DownloadString(new Uri(AutostradeMainSite));
string cookies = wc.ResponseHeaders["Set-Cookie"];

но я не получил никакого результата.Даже смотря в заголовок, там нет файлов cookie.

Затем я попытался с объектом HttpWebRequest, но мне не удалось получить файлы cookie:

HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(AutostradeMainSite);
wr.Method = "GET";
HttpWebResponse response = (HttpWebResponse)wr.GetResponse();
var cookies = response.Cookies

Что я делаю неправильно?

Анализируя главную страницу сайта с помощью некоторых инструментов разработчика для IE или Chrome, я вижу, что некоторые куки отправляются в браузер, но я не вижу их ни в шапке, ни в javascript ..Как это может работать?Заранее спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2010

Сайт может обнаружить, что вы используете неизвестный "браузер", и предположить, что вы не можете принимать куки, поэтому он даже не предоставляет их. Ответ будет заключаться в создании пользовательского веб-запроса, который выглядит так, как будто он поступил из IE 8 вместо .NET WebClient. Вы должны быть в состоянии сделать это, установив значение для ключа User-Agent в WebClient.Headers.

0 голосов
/ 27 сентября 2010

Класс WebClient не может обрабатывать куки из коробки, хотя довольно просто создать производную версию, которая поддерживает куки.Вы можете сделать это с классом HttpWebRequest, но вам нужно установить свойство CookieContainer:

HttpWebRequest req = WebRequest.Create("http://www.google.com") as HttpWebRequest;
req.CookieContainer = new CookieContainer();
HttpWebResponse res = req.GetResponse() as HttpWebResponse;
CookieCollection cookies = res.Cookies;
...