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

How to get proxy info from WebClient object?

我为 WebClient 对象设置了代理 属性:

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 获得的对象为空。 我如何简单地获取这些信息?

Proxy Uri是context bind,也就是说对于不同的原始请求一个proxy配置可以提供不同的proxy Uris。要获得实际的代理 Uri(主机、端口、协议等),您必须提供原始 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(...)

通过凭据变量,您可以获得域、用户名和密码* 属性。

(*仅作记录:不推荐使用登录密码)