【问题标题】:Dynamically using a WebProxy with WPAD script动态使用带有 WPAD 脚本的 WebProxy
【发布时间】:2012-02-12 07:45:53
【问题描述】:

我正在尝试调用网络服务。我需要使用使用 WPAD 脚本的代理。此 WPAD 脚本的 URL 因应用程序的不同部署而异。

虽然 IE 具有正确的代理设置,但应用程序作为 Windows 服务在本地系统帐户下运行,因此应用程序不知道该 Windows 用户的 IE 设置。

将以下内容放入 app.config 中:

<system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true" >
        <proxy autoDetect="True" scriptLocation="http://url.to/wpad.dat"/>
    </defaultProxy>
</system.net>

但这有一个限制,它不能由用户配置。有没有办法从(C#-)代码动态地执行上述操作?我还怀疑上述内容会改变不应通过代理的 Web 服务的行为(但我尚未验证)。

http://msdn.microsoft.com/en-us/library/system.net.webproxy.aspx,我找到了有用的文本:“(有关演示使用 WPAD 功能的示例,请参阅 IWebProxyScript 类的文档。)”但我没有找到示例:(。

【问题讨论】:

    标签: c# .net proxy webproxy


    【解决方案1】:

    这篇关于代码项目的文章展示了如何使用 Windows API 来执行 PAC 脚本并返回给定 url 的正确代理详细信息: http://www.codeproject.com/Articles/12168/Using-PAC-files-proxy

    您可以使用该功能查找代理详细信息,然后直接配置Web服务对象代理,或更改WebRequest.DefaultProxy。

    【讨论】:

    • 我在这里找到了类似的东西:link 但 WPAD 可以返回多个代理服务器(故障转移和/或负载平衡,请参阅 link)。然后它返回它们以分号分隔。使用此方法返回“DIRECT”的条目似乎消失了。因此,尽管这是朝着正确方向迈出的一步,但对我来说似乎并不完整。
    • 不能在返回值上使用string.split获取条目列表,然后依次尝试,列表为空默认不使用代理吗?
    • 这就是我最终要做的。但我不喜欢它: - 我现在有一个循环为我找到的每个代理执行 webrequest - 我不知道如何处理 DIRECT。如果我得到一个空列表,我现在不使用代理,但我已经看到返回代理和 DIRECT 的示例,所以这可能不是真正正确的方法。 - 如果网络请求超时,我真的不知道为什么。可能是代理,也可能是其他东西。所以我用另一个代理重复请求。也许另一个超时?用户等待...... - 我真的不想这样做。我希望操作系统来处理它...
    • 这是 IE 在使用自动配置脚本时的工作方式。如果这引入了问题,要么是 PAC 脚本(超出您的应用程序的控制),要么是代理服务器(同上),所以您真的不能做得更好。当然,如果您的 Web 服务已关闭,用户将不得不等待您检查所有代理才能发现。 DIRECT 仅表示直接连接 - 不要使用代理。
    【解决方案2】:

    IWebProxyScript 由 WebProxy 本身在内部使用。

    如果您使用 WPAD 脚本的 URL 初始化 WebProxy,它将为传递给它的请求解析正确的 URL。您可以将该 WebProxy 设置为 WebRequest,它会自动处理为请求目标设置正确的代理 URL。

    WebRequest request = WebRequest.Create("http://targeturl");
    request.Proxy = new WebProxy("http://url.to/wpad.dat");
    

    您还可以像这样获取给定目标的代理 URL:

    WebProxy proxy = new WebProxy("http://url.to/wpad.dat");    
    Uri proxyUri = proxy.GetProxy(new Uri("http://targeturl"));
    

    这不适用于 PAC 脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      相关资源
      最近更新 更多