Skip to main content
 首页 » 编程设计

c#之使用 HttpWebRequest 的网络身份验证和网站身份验证

2024年02月23日30leader

我正在尝试创建一个将使用 .NET Framework 使用 RSS 数据的应用程序。 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 错误。

请您参考如下方法:

使用以下代码解决了问题

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