Получение 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: я задавал себе тот же вопрос во время моих тестов, поэтому я проверил, и он работает из браузера.