动态使用带有WPAD脚本的WebProxy

本文关键字:脚本 WebProxy WPAD 动态 | 更新日期: 2023-09-27 18:20:28

我正在尝试调用一个Web服务。我需要使用一个使用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#)代码中动态地完成上述操作?我还怀疑上述内容会改变不应该通过代理的网络服务的行为(但我尚未对此进行验证)。

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

动态使用带有WPAD脚本的WebProxy

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

您可以使用该函数来查找代理详细信息,然后直接配置web服务对象代理,或者更改WebRequest.DefaultProxy.

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脚本。