Войдите на веб-страницу, используя HttpWebRequest - PullRequest
0 голосов
/ 01 декабря 2010

Я пытаюсь войти на сайт ниже, используя HttpWebRequest. Я передаю имя пользователя и пароль, используя свойство Credentials, но продолжаю возвращаться на страницу входа на веб-сайте. Может кто-нибудь объяснить, что я делаю не так.

https://oyster.tfl.gov.uk/oyster/entry.do (Страница входа)

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.ContentType = "application/x-www-form-urlencoded"; 
request.Credentials = new NetworkCredential(Username, Password);
request.Method = "POST";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Headers.Add("Accept-Language: en-us,en;q=0.5");
request.Headers.Add("Accept-Encoding: gzip,deflate");
request.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
request.KeepAlive = true;
request.Headers.Add("Keep-Alive: 300");
request.Referer = Url;
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)";

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
    string tmp = reader.ReadToEnd();
}

Ответы [ 3 ]

1 голос
/ 01 декабря 2010

обратите внимание на Условия и положения :

Запрещено [... snip ...]

Использованиелюбой автоматизированной системы, программного обеспечения или процесса для извлечения контента и / или данных, включая траление, извлечение данных и очистку экрана.

Credentials для базовой / etc http безопасности - не безопасность на основе форм.

Было бы лучше использовать API, если таковой существует.HTML-формы предназначены для людей, а не для компьютеров.Похоже, здесь есть бета TfL API .

0 голосов
/ 20 января 2011

Вот класс C #, который может оказаться весьма полезным.

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

[Ссылка удалена]

0 голосов
/ 01 декабря 2010

На этой странице нет HTTP-аутентификации (Basic, Digest, NTLM), поэтому учетные данные ничего не будут делать.

Вам необходимо создать POST для /oyster/security_check, который отправляет имя пользователя и пароль в виде содержимого (данные для отправки будут выглядеть так же, как вы видели бы в строке запроса, если форма была GET, например, username=myName&password=myPass. Сохраните файл cookie для последующих запросов.

...