如何从WebClient对象获取代理信息?

时间:2015-10-29 11:10:25

标签: c# webclient

我为WebClient对象设置了Proxy属性:

WebProxy wp = new WebProxy("proxy server url and credentials here");
webClient.Proxy = wp;

如何从现有WebClient对象获取主机,端口,用户名,密码等代理信息作为字符串?

例如:

            var test =
                webClient.Proxy as WebProxy;
            var test2 = test.Address;
            var test3 = webClient.Proxy.Credentials as NetworkCredential;
            var test4 = test3.UserName;
            var test5 = test3.Password;

但这不起作用,因为我从Proxy和Proxy.Credentials获取的对象为null。 我如何简单地获取这些信息?

1 个答案:

答案 0 :(得分:0)

代理Uri是上下文绑定,对于不同的原始请求,代理配置可以提供不同的代理Uris。要获得实际的代理Uri(主机,端口,协议1等),您必须提供原始的Uri

Uri proxyUri = yourWebClient.Proxy.GetProxy(new Uri(originalRequestUrl))

Uri proxyUri = yourWebClient.Proxy.GetProxy(originalRequestUri)

然后您可以使用proxyUri变量的属性,如主机,端口等。

注意:如果您取回原始的Uri,则意味着:没有代理有效。

如果提供原始请求Uri对您来说是一个问题,您确定所有Uris的代理是相同的,那么ypi cam只提供一个愚蠢(但有效)的uri(尽管这是一个丑陋的解决方案),如:

Uri proxyUri = yourWebClient.Proxy.GetProxy(new Uri("http://www.google.com"))

显然,这不会导致www.google.com的流量,只需获取代理配置。

关于凭据相同的故事:

 NetworkCredential credential  = yourWebClient.Proxy.Credentials.GetCredential(...)

通过凭证变量,您可以获得Domain,UserName和Password *属性。

(*仅供记录:不建议使用记录密码)