HttpWebRequest на сайт HTTPS с перенаправлением

Я пытаюсь автоматизировать чтение некоторой информации со страницы HTTPS с помощью HttpWebRequest. Ссылка, которую я запрашиваю, обычно перенаправляет на страницу с полями для входа/пароля, которые отправлены в файл php.

Код, который у меня есть, не работает, я просто возвращаю информацию о странице, содержащую форму с полями имени пользователя/пароля.

Я не уверен, как мне справиться с этим сценарием.

Любая помощь, как всегда, очень ценится.

Заранее спасибо.

 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());
 } 

person Darren    schedule 19.05.2011    source источник


Ответы (1)


 request.AllowAutoRedirect = true;

Эта строка приводит к тому, что страница перенаправления пропускается, поскольку HttpRequest автоматически переходит по ссылке перенаправления перед возвратом. Если вы хотите проверить страницу перенаправления, измените этот флаг на false.

РЕДАКТИРОВАТЬ:

Возможно, я неправильно понял вопрос, если вы имели в виду, что пытаетесь перейти на реальную страницу (а не на страницы перенаправления или входа), то вам не следует использовать NetworkCredential. NetworkCredential работает только для Basic, Kerbos и аналогичных систем аутентификации на основе браузера, сайт PHP использует аутентификацию на основе формы, которая требует от вас выполнения почтового запроса.

Решение в этом случае состоит в том, чтобы получить форму входа, заполнить соответствующие поля и опубликовать ее, убедившись, что файлы cookie не повреждены, поскольку ваш контейнер файлов cookie должен в этот момент содержать вашу информацию для аутентификации.

person Guvante    schedule 19.05.2011
comment
Спасибо за ответ... Извините за сумбурность, но не могли бы вы опубликовать небольшой псевдокод, чтобы дать представление о необходимых шагах? Буду ли я делать несколько запросов в этом случае? Еще раз спасибо. - person Darren; 20.05.2011
comment
@Darren: я бы использовал Fiddler2, чтобы посмотреть, как выглядит обычная страница входа, и следить за эти инструкции о том, как выполнять POST. Наконец, убедитесь, что вы прикрепили свою CookieCollection и поддерживаете объект между вызовами. - person Guvante; 20.05.2011