Сетевая аутентификация и аутентификация веб-сайта с использованием HttpWebRequest - PullRequest
1 голос
/ 03 января 2011

Я пытаюсь создать приложение, которое будет использовать данные RSS, используя .NET Framework. Сайт RSS требует имени пользователя и пароля для начала. и я запускаю это приложение на моем рабочем месте, для которого требуется NTLM-аутентификация для подключения к Интернету.

Ниже приведен код, который я пытаюсь использовать

NetworkCredential nc = new NetworkCredential("SITEUSERNAME", "SITEPASSWORD");
CredentialCache cache = new CredentialCache();
cache.Add(new Uri(RSSFeed), "Basic", nc);
cache.Add(new Uri(RSSFeed), "Ntlm", new NetworkCredential("USERNAME","PASSWORD","DOAMIN"));
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(RSSFeed);
myHttpWebRequest.Proxy.Credentials = cache;
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();

я получаю ошибку 407, и если я просто использую CredentialCache.DefaultNetworkCredentials, я получаю ошибку 401.

Ответы [ 2 ]

3 голосов
/ 03 января 2011

решил проблему с помощью следующего кода

 string credentials = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("UserName" + ":" + "Password"));
 StringBuilder outputData = new StringBuilder();
 HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(RSSFeed);
 myHttpWebRequest.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
 myHttpWebRequest.Headers.Add("Authorization", "Basic " + credentials);
 HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
 Stream streamResponse = myHttpWebResponse.GetResponseStream();
1 голос
/ 03 января 2011

Если этот код работает, значит, ваш оригинальный код выше был неверным. Вы должны установить

request.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;

и

NetworkCredential nc = new NetworkCredential("SITEUSERNAME", "SITEPASSWORD");
CredentialCache cache = new CredentialCache();
cache.Add(new Uri(RSSFeed), "Basic", nc);
cache.Add(new Uri(RSSFeed), "Ntlm", new NetworkCredential("USERNAME","PASSWORD","DOAMIN"));
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(RSSFeed);
myHttpWebRequest.Credentials = cache;

Другими словами, вы обменяли учетные данные на прокси и сервер назначения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...