Этот вопрос является продолжением моего предыдущий вопрос о получении HTML со страницы ASPX. Я решил попробовать использовать объект webclient, но проблема в том, что я получаю HTML-код страницы входа, потому что вход в систему требуется. Я попробовал «войти в систему» с помощью объекта webclient:
WebClient ww = new WebClient();
ww.DownloadString("Login.aspx?UserName=&Password = ");
string html = ww.DownloadString("Internal.aspx");
Но я все время получаю страницу входа в систему. Я знаю, что информация об имени пользователя не хранится в файле cookie. Я, должно быть, делаю что-то не так или упускаю важную часть. Кто-нибудь знает, что это может быть?





Хорошо ли нормально работает открытие страницы в браузере с помощью «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-запросы и ответы, которые происходят, когда вы делаете это вручную через браузер.