通过代理的XMLDocument.Load(url)

时间:2020-03-06 14:38:15  来源:igfitidea点击:

我有一些代码基本上使用XMLDocument.Load(uri)方法读取XML文档,该方法可以正常工作,但是如果通过代理进行调用则无法很好地工作。

我想知道是否有人知道通过代理进行此调用(或者达到相同效果)的方法?

解决方案

我们不能将XMLDocument配置为使用代理。我们可以使用WebRequest或者WebClient类通过代理加载数据,并将获得的响应流传递给XMLDocument

我们也可以尝试使用XmlTextReader类。它允许我们设置网络凭据。有关详细信息,请参见:

从文件读取时向XmlResolver提供身份验证凭据

我们需要使用WebProxy和WebRequest下载xml,然后进行解析。

我们是否必须向代理提供凭据?

如果是这样,这应该会有所帮助:
"从文件读取时向XmlResolver提供身份验证凭据"
http://msdn.microsoft.com/en-us/library/aa720674.aspx

基本上,你...

  • 使用URL创建一个XmlTextReader
  • 设置读者的XmlResolver的Credentials属性
  • 创建一个XmlDocument实例,并将阅读器传递给Load方法。

这是我最终使用的代码:

WebProxy wp = new WebProxy(Settings.Default.ProxyAddress);
wp.Credentials = new NetworkCredential(Settings.Default.ProxyUsername, Settings.Default.ProxyPassword);
WebClient wc = new WebClient();
wc.Proxy = wp;

MemoryStream ms = new MemoryStream(wc.DownloadData(url));
XmlTextReader rdr = new XmlTextReader(ms);
return XDocument.Load(rdr);

使用lomaxx的答案,但要更改

MemoryStream ms = new MemoryStream(wc.DownloadData(url));
XmlTextReader rdr = new XmlTextReader(url);

MemoryStream ms = new MemoryStream(wc.DownloadData(url));
XmlTextReader rdr = new XmlTextReader(ms);