Как программно войти на сайт для просмотра экрана?
-
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 — все это выполняется элементом управления браузера.
Если вы пойдете по этому пути, еще несколько предложений:
- Вы можете запретить элементу управления загружать надстройки, такие как Flash, — это может сэкономить вам время.
- После входа в систему вы можете получить любую необходимую информацию из DOM — нет необходимости анализировать необработанный HTML.
- Если вы хотите сделать инструмент еще более переносимым на случай, если сайт изменится в будущем, вы можете заменить явную манипуляцию с 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