动态使用带有WPAD脚本的Web代理

时间:2012-01-17 13:52:09

标签: c# .net proxy webproxy

我正在尝试拨打网络服务。我需要使用使用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# - )代码动态执行上述操作?我也怀疑上面会改变不应该通过代理服务的webservices的行为(但我还没有验证过)。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

IWebProxyScript由WebProxy本身内部使用。

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

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

您还可以获取给定目标的代理网址,如下所示:

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

这不适用于PAC脚本。