【问题标题】:XMLDocument.Load(url) through a proxyXMLDocument.Load(url) 通过代理
【发布时间】:2010-09-12 14:26:01
【问题描述】:

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

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

【问题讨论】:

    标签: c# xml proxy


    【解决方案1】:

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

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

    Supplying Authentication Credentials to XmlResolver when Reading from a File

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        基本上,你...

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

        【讨论】:

          【解决方案4】:

          这是我最终使用的代码:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              【解决方案6】:

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

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2022-06-14
                • 2012-08-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多