Получение HTML со страницы за логином - PullRequest
1 голос
/ 14 сентября 2008

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

WebClient ww = new WebClient();

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

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

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

Ответы [ 8 ]

2 голосов
/ 14 сентября 2008

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

WebClient ww = new WebClient();
ww.Credentials = CredentialCache.DefaultCredentials;
ww.DownloadString("Login.aspx?UserName=&Password=");
string html = ww.DownloadString("Internal.aspx");
1 голос
/ 24 сентября 2008

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

1 голос
/ 16 сентября 2008

Просто передайте действительные параметры входа в систему для данного 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();
      }
1 голос
/ 14 сентября 2008

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

1 голос
/ 14 сентября 2008

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

0 голосов
/ 24 сентября 2008

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

0 голосов
/ 16 сентября 2008

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

0 голосов
/ 14 сентября 2008

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

...