ServicePointManager不支持https代理吗?

时间:2017-11-21 11:52:57

标签: c# .net https proxy

我在某个客户端上通过互联网请求HTTPS服务时遇到问题,当我尝试这样做时会抛出异常" ServicePointManager不支持使用https方案的代理#34;。在某些客户端上,我的代码工作正常,但在某些客户端上,它会因异常而失败我认为代码工作正常的客户有http代理,https流量来自http代理,这非常好。

此功能会创建一个新请求:

var req = (HttpWebRequest)WebRequest.Create(url);

// This thing is needed to get default proxy
// and user credentials written in iexplore
var proxy = req.Proxy;
if(proxy != null) {
    var puri = proxy.GetProxy(req.RequestUri);
    var prox = new WebProxy(puri.ToString());

    prox.Credentials = CredentialCache.DefaultCredentials;
    req.UseDefaultCredentials = true;
    req.Proxy = prox;
}

// Setting up custom cookies and UA
req.CookieContainer = Config.Cookies;
req.UserAgent = Config.UserAgent;

这就是我接受所有证书的方式:

ServicePointManager.ServerCertificateValidationCallback = 
(sender, cert, chain, sslpolicy) => true;

ServicePointManager似乎并不支持通过https使用代理。我该如何解决这个问题?如果我以某种方式使https WebRequest通过http代理而不是https,这会起作用,如果是这样,我该怎么办呢?

1 个答案:

答案 0 :(得分:0)

是的,您是对的,似乎ServicePointManager不支持https方案的代理。

如果将方案从HTTPS更改为HTTP,它将可以正常工作。

这只是客户端和代理之间的不安全或SSL上的初始请求。取决于服务器,通过代理隧道传输的流量是加密的还是不加密的。

如果您尝试通过HTTP代理访问任何SSL服务器,则流量仍被加密。

让我们说,如果您仍尝试通过HTTPS代理访问HTTP服务器,则不会对通信进行加密。