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

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

WebClient ww = new WebClient();

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

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

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

8 ответов

Решение

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

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

публичная статическая строка HttpPost (строковый URI, строковые параметры)
      {
         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(Параметры);
         req.ContentLength = bytes.Length;
         System.IO.Stream os = req.GetRequestStream();
         os.Write(байты, 0, байты. Длина);
         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();
      }

Попробуйте установить свойство credentials объекта WebClient

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

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

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

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

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

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

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

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