Dynamically using a WebProxy with WPAD script

半世苍凉 提交于 2019-12-09 17:54:08

问题


I am trying to call a webservice. I need to use a proxy that uses a WPAD script. The URL to this WPAD script is different for different deployments of the application.

Although IE has the correct proxysettings, the application is running as a windows service running under Local System account, so the application does not know the IE-settings for this windows-user.

Putting the following in app.config works:

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

But this has the restriction that it cannot be configured by the user. Is there a way to do the above dynamically from (C#-)code? I also suspect the above will change behaviour of webservices that should not go through a proxy (but I have not verified that).

At http://msdn.microsoft.com/en-us/library/system.net.webproxy.aspx I found the helpful text: "(For an example that demonstrates using the WPAD feature, see the documentation for the IWebProxyScript class.)" but I have not found the example :(.


回答1:


This article on code project shows how to use windows APIs to execute the PAC script and return the correct proxy details for a given url: http://www.codeproject.com/Articles/12168/Using-PAC-files-proxy

You could use the function to find out the proxy details, and then configure the web service objects proxy directly, or change WebRequest.DefaultProxy.




回答2:


IWebProxyScript is used internally by WebProxy itself.

If you initialize a WebProxy with the URL to a WPAD script, it will resolve the correct URL for the requests that are passed to it. You can set that WebProxy to a WebRequest and it will automatically handle setting the correct proxy URL for the target of the request.

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

You can also get out the proxy URL for a given target like so:

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

This DOES NOT work for PAC scripts.



来源:https://stackoverflow.com/questions/8895754/dynamically-using-a-webproxy-with-wpad-script

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!