HttpWebRequest для HTTPS сайта с перенаправлением
Я пытаюсь автоматизировать чтение некоторой информации со страницы HTTPS с помощью HttpWebRequest. Ссылка, которую я запрашиваю, обычно перенаправляет на страницу с полями логина / пароля, которые помещаются в php-файл.
Код, который у меня не работает, в том, что я просто возвращаю информацию о странице, содержащую форму с полями username/password.
Я не уверен, как я должен справиться с этим сценарием.
Любая помощь, как всегда, высоко ценится.
Заранее спасибо.
NetworkCredential nc = new NetworkCredential(username, password);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://myaccount.talktalk.co.uk/myservices/bbusage/viewbbusage");
request.AllowAutoRedirect = true;
request.Credentials = nc;
request.Method = "POST";
CookieContainer cc = new CookieContainer();
request.CookieContainer = cc;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
Console.WriteLine(reader.ReadToEnd());
}
1 ответ
request.AllowAutoRedirect = true;
Эта строка вызывает пропуск страницы перенаправления, так как HttpRequest автоматически переходит по ссылке перенаправления перед возвратом. Если вы хотите просмотреть страницу перенаправления, измените этот флаг на false.
РЕДАКТИРОВАТЬ:
Возможно, я неправильно прочитал вопрос: если вы имели в виду, что пытаетесь перейти на реальную страницу (не на страницы перенаправления или входа), то вам не следует использовать NetworkCredential. NETworkCredential работает только для Basic, Kerbos и аналогичных систем проверки подлинности на основе браузера. Сайт PHP использует проверку подлинности на основе формы, которая требует выполнения запроса после публикации.
Решение в этом случае состоит в том, чтобы получить форму входа в систему, заполнить соответствующие поля и опубликовать ее, не забывая держать куки в такте, так как ваш контейнер куки должен в этот момент содержать вашу информацию для аутентификации.