Как назначить учетные данные для WebRequest, а затем перейти к нему? - PullRequest
1 голос
/ 28 марта 2019

Я пытаюсь просмотреть отчет, используя чужие учетные данные.Я застрял на том, как назначить учетные данные и затем перейти к URL-адресу.

Вопрос : можно ли назначить учетные данные для WebRequest, а затем перейти к URL-адресу?Может быть, что-то вроде этого:

WebRequest request = WebRequest.Create(repUrl);
request.Credentials = new NetworkCredential("UserName", "Password");
webBrowser1.Navigate(request.RequestUri);

Я знаю, что могу видеть отчет, когда использую что-то подобное.Но я не могу щелкнуть отчет:

WebRequest request = WebRequest.Create(repUrl);
request.Credentials = new NetworkCredential("Username", "Password");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader receiveStream = new StreamReader(response.GetResponseStream());
webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.DocumentStream = receiveStream.BaseStream;

Пожалуйста, помогите мне в этом.Я слишком долго застрял в этой проблеме.Спасибо.

1 Ответ

0 голосов
/ 28 марта 2019

Установка учетных данных, как показано ниже

request.Credentials = new NetworkCredential("UserName", "Password");

была бы возможна, если страница принимает учетные данные (базовая аутентификация), что, по моему опыту, в большинстве случаев не так.

Если вы хотитечтобы использовать WebRequest, вам нужно будет предоставить заголовки, файлы cookie, и вам потребуется контейнер для файлов cookie, а теперь о том, как получить файлы cookie, - это другая история.

Поскольку вы используете элемент управления WebBrowser.Самый простой способ, который я бы предложил, это сначала перейти на страницу входа, заполнить учетные данные и нажать кнопку «Отправить».затем перейдите к нужной странице страницы:

private void webbrowser1_DocumentCompleted(object sender, DocumentCompletedEventArgs e)
{
     if(webbrowser1.Url.EndsWith("login.aspx")  //check if it is the login url
     {
          var doc = webbrowser1.Document;
          doc.GetElementById("email").SetAttribute("value", email);
          doc.GetElementById("password").SetAttribute("value", password);
          doc.GetElementsByTagName("input").OfType<HtmlElement>()
               .FirstOrDefault(x => x.GetAttribute("type") == "submit"))
               .InvokeMember("click");
     }
     else
     {
           webbrowser1.Navigate(repUrl);
     }


}

В приведенном выше ответе я только что предположил, что страница входа в систему login.aspx, а поля электронной почты и пароля имеют идентификатор email и password,конечно, вы должны изменить способ заполнения этих входных данных своими id s или, если у них нет идентификатора, использующего их имена, ...

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