Как программно войти на веб-сайт для создания экрана? - PullRequest
22 голосов
/ 10 июня 2009

Мне нужна информация с сайта, который мне не принадлежит, чтобы получить эту информацию, мне нужно войти на сайт, чтобы собрать информацию, это происходит через форму HTML. Как я могу сделать этот аутентифицированный скрининг в C #?

Дополнительная информация:

  • Проверка подлинности на основе файлов cookie.
  • Требуется действие POST.

Ответы [ 5 ]

23 голосов
/ 10 июня 2009

Вы бы сделали запрос, как если бы вы только что заполнили форму. Предполагая, что это, например, POST, вы делаете запрос POST с правильными данными. Теперь, если вы не можете войти непосредственно на ту же страницу, которую хотите очистить, вам нужно будет отследить все файлы cookie, установленные после запроса на вход, и включить их в запрос на удаление, чтобы позволить вам оставаться в системе.

Может выглядеть так:

HttpWebRequest http = WebRequest.Create(url) as HttpWebRequest;
http.KeepAlive = true;
http.Method = "POST";
http.ContentType = "application/x-www-form-urlencoded";
string postData="FormNameForUserId=" + strUserId + "&FormNameForPassword=" + strPassword;
byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData);
http.ContentLength = dataBytes.Length;
using (Stream postStream = http.GetRequestStream())
{
    postStream.Write(dataBytes, 0, dataBytes.Length);
}
HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;
// Probably want to inspect the http.Headers here first
http = WebRequest.Create(url2) as HttpWebRequest;
http.CookieContainer = new CookieContainer();
http.CookieContainer.Add(httpResponse.Cookies);
HttpWebResponse httpResponse2 = http.GetResponse() as HttpWebResponse;

Может быть.

5 голосов
/ 10 июня 2009

Вы можете использовать WebBrowser . Просто введите URL-адрес сайта, затем используйте DOM, чтобы установить имя пользователя и пароль в правильных полях, и в конечном итоге отправить щелчок на кнопку отправки. Таким образом, вам ничего не нужно, кроме двух полей ввода и кнопки отправки. Никакой обработки куки, никакого необработанного разбора HTML, никакого сниффинга HTTP - все, что делается с помощью элемента управления браузера.

Если вы пойдете по этому пути, еще несколько предложений:

  1. Вы можете запретить элементу управления загружать надстройки, такие как Flash, - это может сэкономить вам время.
  2. После входа в систему вы можете получить всю необходимую информацию из DOM - нет необходимости анализировать необработанный HTML.
  3. Если вы хотите сделать инструмент еще более переносимым в случае изменения сайта в будущем, вы можете заменить явные манипуляции с DOM внедрением JavaScript. JS может быть получен из внешнего ресурса, и после вызова он может заполнять поля и отправлять.
3 голосов
/ 27 ноября 2015

В некоторых случаях httpResponse.Cookies будет пустым. Вместо этого используйте CookieContainer.

CookieContainer cc = new CookieContainer();

HttpWebRequest http = WebRequest.Create(url) as HttpWebRequest;
http.KeepAlive = true;
http.Method = "POST";
http.ContentType = "application/x-www-form-urlencoded";

http.CookieContainer = cc;

string postData="FormNameForUserId=" + strUserId + "&FormNameForPassword=" + strPassword;
byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData);
http.ContentLength = dataBytes.Length;
using (Stream postStream = http.GetRequestStream())
{
    postStream.Write(dataBytes, 0, dataBytes.Length);
}
HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;
// Probably want to inspect the http.Headers here first
http = WebRequest.Create(url2) as HttpWebRequest;

http.CookieContainer = cc;

HttpWebResponse httpResponse2 = http.GetResponse() as HttpWebResponse;
1 голос
/ 25 февраля 2012

Как дополнение к ответу дламбина Необходимо иметь

http.AllowAutoRedirect=false;

В противном случае

HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;

Он сделает еще один запрос на исходный URL, и вы не сможете получить URL2.

0 голосов
/ 10 июня 2009

Вам нужно использовать HTTPWebRequest и выполнить POST. Эта ссылка должна помочь вам начать. Ключевым моментом является то, что вам нужно просмотреть HTML-форму страницы, с которой вы пытаетесь опубликовать, чтобы увидеть все параметры, необходимые для отправки сообщения.

http://www.netomatix.com/httppostdata.aspx

http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...