c # httpwebrequest проблема с учетными данными - PullRequest
1 голос
/ 08 марта 2011

Я пытаюсь войти в www.diary.com , используя объект httpwebrequest.Тем не менее, он всегда не мог войти в систему и продолжал возвращать мне страницу входа.Может кто-нибудь просветить меня о том, что / не так?

Мой код выглядит следующим образом:

// prepare the web page we will be asking for
HttpWebRequest request = (HttpWebRequest)
    WebRequest.Create(@"http://diary.com/events/agenda");

request.ContentType = "text/html";

request.Credentials = new NetworkCredential(@"user@hotmail.com", "password");

request.AllowAutoRedirect = true;
request.Referer = @"http://diary.com/";

// execute the request
HttpWebResponse response = (HttpWebResponse)
    request.GetResponse();

// we will read data via the response stream
Stream resStream = response.GetResponseStream();

// set the WebBrowser object documentStream to the response stream
myWB.DocumentStream = resStream;

// simply tell me the title of the webpage
MessageBox.Show(myWB.Document.Title);

1 Ответ

5 голосов
/ 08 марта 2011

У вас есть две проблемы:

  1. Вы предоставляете учетные данные на уровне протокола, что не так, как работает большинство веб-сайтов (включая этот).Протокол полностью анонимный, и сайт использует Forms Authentication для входа в систему. Ваш код должен фактически создать запрос POST, который имитирует отправку формы входа.Ответ, возвращаемый с сервера, будет включать cookie-файл с вашим токеном авторизации, который ведет к ...

  2. Вам необходимо сохранять cookie-файлы при каждом запросе.После того как вы отправите запрос на вход в систему и получите cookie-файл, вам необходимо его сохранить и отправить его вместе с заголовками каждого последующего запроса.Самый простой способ сделать это - использовать WebClient для охвата нескольких запросов и CookieContainer для отслеживания файлов cookie для вас.

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

...