如何使用 http 代理连接到 https 网络?

Posted

技术标签:

【中文标题】如何使用 http 代理连接到 https 网络?【英文标题】:How do I connect to the https web with an http proxy? 【发布时间】:2021-03-10 06:10:17 【问题描述】:

我正在使用翻译,因为我是韩国人。即使我不擅长,我也会感谢您的理解。

我想使用 http 代理从 c# 发送一个 post 请求到 https web 到 http 代理。

            HttpClient httpclient = null;
            proxy = "http://" + proxy;
            HttpClientHandler handler = new HttpClientHandler()
            

                Proxy = new WebProxy(proxy),
                UseProxy = true,
            ;

            httpclient = new HttpClient(handler);

这是我的 C# 代码

但我无法连接到 https 网络。

有没有办法在c#中使用http客户端模块产生和下面python代码一样的效果?

        proxy= 'https' : 'http://' + input_proxy 
        resp=self.desktop.post(self.url,self.payload,proxies=proxy)

【问题讨论】:

我推荐你访问这个链接:***.com/questions/29856543/… 【参考方案1】:

我推荐你访问这个链接:HttpClient and using a proxy

首先,创建一个代理对象

var proxy = new WebProxy

    Address = new Uri($"http://proxyHost:proxyPort"),
    BypassProxyOnLocal = false,
    UseDefaultCredentials = false,

    // *** These creds are given to the proxy server, not the web server ***
    Credentials = new NetworkCredential(
        userName: proxyUserName,
        password: proxyPassword)
;

现在创建一个使用该代理的客户端处理程序

var httpClientHandler = new HttpClientHandler

    Proxy = proxy,
;

如果您不需要通过网络服务器进行身份验证,请忽略此部分:

if (needServerAuthentication)

    httpClientHandler.PreAuthenticate = true;
    httpClientHandler.UseDefaultCredentials = false;

    // *** These creds are given to the web server, not the proxy server ***
    httpClientHandler.Credentials = new NetworkCredential(
        userName: serverUserName,
        password: serverPassword);

最后,创建 HTTP 客户端对象

var client = new HttpClient(handler: httpClientHandler, disposeHandler: true);

【讨论】:

可以访问https吗? 是的,但我认为如果服务器只支持更高的 TLS 版本,如 TLS 1.2,除非您的客户端 PC 默认配置为使用更高的 TLS 版本,否则它仍然会失败。为了克服这个问题,在设置地址之前添加这个代码:System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;Address = new Uri($"https://proxyHost:proxyPort"), ...【参考方案2】:

如果您想代理使用,也可以使用著名的 c# 库进行 RESTAPI 通信 RESTSharp

    var client = new RestClient("http://example.com")
    client.Proxy = new WebProxy("http://proxy.example.com")

【讨论】:

这比使用HttpClient 更好吗?不是。

以上是关于如何使用 http 代理连接到 https 网络?的主要内容,如果未能解决你的问题,请参考以下文章

连接到 Microsoft Azure 媒体服务时如何使用网络代理

如何使用 curl 和 php 连接到安全 (https) 代理?

如何查看所有连接到HTTP或HTTPS端口的客户端

无法通过代理连接到 websocket

代理后面的TYPO3生成与http而不是https的绝对链接

通过http代理连接到FTP服务器