Получение HTML со страницы за логином

Этот вопрос является продолжением моего предыдущий вопрос о получении HTML со страницы ASPX. Я решил попробовать использовать объект webclient, но проблема в том, что я получаю HTML-код страницы входа, потому что вход в систему требуется. Я попробовал «войти в систему» ​​с помощью объекта webclient:

WebClient ww = new WebClient();

 ww.DownloadString("Login.aspx?UserName=&Password = ");

 string html = ww.DownloadString("Internal.aspx");

Но я все время получаю страницу входа в систему. Я знаю, что информация об имени пользователя не хранится в файле cookie. Я, должно быть, делаю что-то не так или упускаю важную часть. Кто-нибудь знает, что это может быть?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 061
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Хорошо ли нормально работает открытие страницы в браузере с помощью «Login.aspx? UserName = & Password =»?
Некоторые страницы могут не разрешать вход с использованием данных, указанных в URL-адресе, и их необходимо ввести в форму входа на странице, а затем отправить.

@Fire Lancer: Я задавал себе тот же вопрос во время своих тестов, поэтому я проверил, и он работает в браузере.

Попробуйте установить свойство учетных данных объекта WebClient

WebClient ww = new WebClient();
ww.Credentials = CredentialCache.DefaultCredentials;
ww.DownloadString("Login.aspx?UserName=&Password = ");
string html = ww.DownloadString("Internal.aspx");

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

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

Ответ принят как подходящий

Просто передайте действительные параметры входа в заданный URI. Должен помочь вам.

Если у вас нет информации для входа в систему, не пытайтесь ее обойти.

public static string HttpPost( string URI, string Parameters )
      {
         System.Net.WebRequest req = System.Net.WebRequest.Create( URI );
         req.ContentType = "application/x-www-form-urlencoded";
         req.Method = "POST";
         byte[] bytes = System.Text.Encoding.ASCII.GetBytes( Parameters );
         req.ContentLength = bytes.Length;
         System.IO.Stream os = req.GetRequestStream();
         os.Write( bytes, 0, bytes.Length );
         os.Close();
         System.Net.WebResponse resp = req.GetResponse();
         if ( resp == null ) return null;
         System.IO.StreamReader sr = new System.IO.StreamReader( resp.GetResponseStream() );
         return sr.ReadToEnd().Trim();
      }

Используйте Firefox с плагином LiveHttpHeaders.
Это позволит вам войти в систему через реальный браузер и ТОЧНО видеть, что отправляется на сервер. Мой первый вопрос - убедиться, что он не ожидает POST от формы. Пример URL, который вы загружаете, отправляет информацию через строку запроса GET.

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

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