XmlReader.Create()远程服务器返回错误:(403)Forbidden

时间:2011-09-20 16:27:21

标签: c# asp.net

_rssSource = @"http://feeds.bbci.co.uk/news/world/rss.xml";
XmlReader reader = XmlReader.Create(_rssSource);

我有上面的代码在GetResponse()中抛出以下错误:

System.Net.WebException was unhandled by user code
  Message=The remote server returned an error: (403) Forbidden.
  Source=System
  StackTrace:
       at System.Net.HttpWebRequest.GetResponse()
       at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy)
   at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy)
   at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
   at System.Xml.XmlReaderSettings.CreateReader(String inputUri, XmlParserContext inputContext)
   at System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings, XmlParserContext inputContext)
   at System.Xml.XmlReader.Create(String inputUri)

我试图通过fiddler跟踪请求的内容,但是除了包含代码的页面请求之外没有任何请求显示。链接在ie / visual studio中工作正常。

我不确定它是否与代理服务器/ IIS /互联网设置有关。

知道发生了什么事吗?

1 个答案:

答案 0 :(得分:9)

尝试使用与代码在同一台计算机上运行的浏览器访问相同的源,以消除易于检测的问题,如所需的凭据或网络限制。如果您的浏览器可以正常阅读Feed,那么您可能需要调整请求属性。

RSS服务可能会明确禁止XmlReader.Create()提供的默认.NET用户代理。测试此方法的一种简单方法是在WebClient对象中显式设置用户代理字符串,然后在URL上调用OpenRead()方法:

WebClient webClient = new WebClient();
webClient.Headers.Add("user-agent", "MyRSSReader/1.0");

XmlReader reader = XmlReader.Create(webClient.OpenRead(_rssSource));

如果您发明的用户代理字符串不起作用,您可以尝试欺骗well known Feed阅读器或浏览器的字符串。