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

本文关键字:获取 代理 信息 对象 WebClient | 更新日期: 2023-09-27 18:19:42

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

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

如何以字符串形式从现有WebClient对象中获取Host、Port、Username、Password等代理信息?

例如:

            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。我如何简单地获取这些信息?

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

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

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

Uri proxyUri = yourWebClient.Proxy.GetProxy(originalRequestUri)

然后您可以使用proxyUri变量的属性,如Host、Port等。

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

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

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

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

关于凭据相同的故事:

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

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

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