C# 通过代理加载(url)

C# 通过代理加载(url),c#,xml,proxy,C#,Xml,Proxy,我有一段代码,基本上使用XMLDocument.Load(uri)方法读取XML文档,该方法工作得很好,但如果通过代理进行调用,则工作得不太好 我想知道是否有人知道通过代理进行此调用(或实现相同效果)的方法?您不能将XMLDocument配置为使用代理。您可以使用WebRequest或WebClient类通过代理加载数据,并将获得的响应流传递给XMLDocument 您还可以尝试使用XmlTextReader类。它允许您设置网络凭据。详情请参阅: 您需要使用和WebRequest下载xml,然后

我有一段代码,基本上使用XMLDocument.Load(uri)方法读取XML文档,该方法工作得很好,但如果通过代理进行调用,则工作得不太好


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

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

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


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

您必须向代理提供凭据吗

如果是这样,这将有助于: “读取文件时向XmlResolver提供身份验证凭据”

基本上,你

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


    实际上,您可以使用Windows代理配置,而不是存储在应用程序的设置中。我相信这是现在的标准,所以不必在每个程序中配置代理,即查看Chrome的代理指向Windows的设置

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