XMLDocument.Load(url)通过代理

时间:2008-09-24 01:43:49

标签: c# xml proxy

我有一些基本上使用XMLDocument.Load(uri)方法读取XML文档的代码,该方法工作正常,但如果通过代理进行调用则效果不佳。

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

6 个答案:

答案 0 :(得分:14)

这是我最终使用的代码:

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

答案 1 :(得分:12)

使用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);

答案 2 :(得分:11)

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

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

基本上,你......

  1. 使用网址
  2. 创建XmlTextReader
  3. 设置阅读器的XmlResolver的凭据属性
  4. 创建一个XmlDocument实例并将阅读器传递给Load方法。

答案 3 :(得分:6)

您无法将XMLDocument配置为使用代理。您可以使用WebRequest或WebClient类通过代理加载数据并将获得的响应流传递给XMLDocument

您也可以尝试使用XmlTextReader类。它允许您设置网络凭据。详情请见:

Supplying Authentication Credentials to XmlResolver when Reading from a File

答案 4 :(得分:3)

您需要使用WebProxy和WebRequest下载xml,然后解析它。

答案 5 :(得分:0)

实际上,您可以使用Windows代理配置,而不是将其存储在应用程序的设置中。我认为这是目前的标准,因此不必在每个程序中都配置代理,即查看Chrome的“代理设置”可直接定向到Windows

IWebProxy wp = WebRequest.GetSystemWebProxy();                  
wp.Credentials = WebRequest.GetSystemWebProxy().Credentials;                    
WebClient wc = new WebClient();
wc.Proxy = wp;