Как программно войти на сайт для просмотра экрана?

StackOverflow https://stackoverflow.com/questions/975426

  •  13-09-2019
  •  | 
  •  

Вопрос

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

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

  • Аутентификация на основе файлов cookie.
  • Требуется действие POST.
Это было полезно?

Решение

Вы сделаете запрос так, как если бы вы только что заполнили форму.Предполагая, например, что это 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;

Может быть.

Другие советы

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

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

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

В некоторых случаях 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;

В качестве дополнения к ответу Дламбина необходимо иметь

http.AllowAutoRedirect=false;

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

HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top