当前位置: 首页 > 知识库问答 >
问题:

如何使用代理执行https请求

公西承
2023-03-14

我可以在不设置代理的情况下执行http或https客户端请求,

enter code here
tr := &http.Transport{
    TLSClientConfig: &tls.Config{InsecureSkipVerify: true},     
}

client := &http.Client{}
client.Transport = tr

request, err := http.NewRequest("HEAD", "http://www.???.com", nil)
request.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36")

resp, err := client.Do(request)

if err != nil {
    log.Fatalln(err)
    return
}
defer resp.Body.Close()

httpcode = resp.Status

这个脚本工作正常,当我请求https url时,我得到一个200 ok,但是如果我设置了代理,脚本:

proxyString := "https://47.91.179.xxx:443"
proxyUrl, _ := url.Parse(proxyString)

tr := &http.Transport{
    Proxy: http.ProxyURL(proxyUrl),
    TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, 
    
}

client := &http.Client{}
client.Transport = tr

....................

我总是收到“坏请求”,我看文件:https://golang.org/pkg/net/http/:

...........从Go1.6开始,http包在使用HTTPS时对http/2协议有透明的支持。必须禁用HTTP/2的程序可以通过将transport.tlsnextproto(对于客户端)或server.tlsnextproto(对于服务器)设置为非空映射来执行此操作。或者,当前支持以下GODEBUG环境变量:..............

所以,我试图阻止http2:

tr := &http.Transport{
    Proxy: http.ProxyURL(proxyUrl),
    //Proxy: http.ProxyFromEnvironment,
    TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    TLSNextProto:    make(map[string]func(authority string, c *tls.Conn) http.RoundTripper),
}

同样的问题,“糟糕的请求”。我试过os.setenv(“https_proxy”,“47.91.???.???:443”),结果是一样的。这是登录服务器:

{S;}220.255.95.68{S;}-{S;}07/Mar/2017:17:01:47 +0800{S;}CONNECT www.panpacific.com:443 HTTP/1.1{S;}400{S;}173{S;}340{S;}-{S;}-{S;}-{S;}-{S;}-{S;}www.panpacific.com

那么,golang是否支持通过代理进行https客户端请求呢?我如何得到正确的结果?

共有1个答案

公良弘毅
2023-03-14

您的client.transport.proxy配置似乎没有任何问题。尝试的两种方法(ProxyURLProxyFromEnvironment)都可以很好地指定转发代理。

相关问题:如何编程去使用代理?

需要注意的一点是,尽管不太可能,但后续的客户端调用不会以某种方式绕过WriteProxy的使用,而是直接调用Write--因为这会破坏代理规范。

如果您试图使用NGINX作为反向代理,那么配置是服务器端的问题,您的客户机不需要特殊的代理配置--只需更改您的请求URL以指向代理即可。

附带说明:如果没有另外指定,&http.client{}将使用DefaultTransport,该自动包含ProxyFromEnvironment,因此只有在构造非默认传输(如问题中所做的那样,以便指定InsecureSkipVerify)或希望具有特定于应用程序的代理连接时,才需要额外的代理配置。并且,要重复,只有在使用转发代理时才需要客户端代理配置。

 类似资料:
  • 说我想得到以编程方式。目前是戈朗。org(ssl)有一个颁发给所以当我运行此命令时: 我得到了(如我所料) 现在,我想自己信任这个证书(想象一个自我颁发的证书,我可以验证指纹等):我如何发出请求并验证/信任证书? 我可能需要使用openssl下载证书,将其加载到我的文件中,并填写结构!?

  • 问题内容: 我目前正在尝试使用进行多个请求。 我用谷歌搜索了如何做到这一点,答案是使用。 至此,我得到了: 然后我尝试了一个请求,并且一切正常。 然后,我通过cmd创建了一个信任库,并导入了目标网站的证书,使用我的信任库设置并设置的of : 如果我尝试执行Https,则会出现异常。 如果我做同样的事情,但一切正常。 谁能告诉我如何使它起作用?(不用担心,我不会创建任何ddos工具) 提前致谢! P

  • 假设您想对某个网站执行https请求,但中间有一个代理。 上述代理不查看请求,只是在用户代理使用HTTP连接方法后将所有流量中继到实际的HTTPS服务器(如中所示http://www.web-cache.com/Writings/Internet-Drafts/draft-luotonen-web-proxy-tunneling-01.txt)。 现在我的问题是:在代理打开到目标Web服务器的SS

  • 问题内容: 说我想以编程方式获取。目前,golang.org(ssl)的证书不正确,因此我将其签发给So: 我得到了(如我所料) 现在,我想自己信任该证书(想象一个可以颁发指纹的自我发行的证书,等等):如何提出请求并验证/信任该证书? 我可能需要使用openssl下载证书,将其加载到我的文件中并填充struct!?。 问题答案: 安全说明:禁用安全检查是危险的,应避免 您可以全局禁用默认客户端的所

  • HTTP VS HTTPS 回想上一节的http代理,我们是基于应用层的http协议实现的代理功能。由于http是明文传输,代理可以解析出客户端的真实的请求报文,并且拿着该请求报文“代表”客户端向真正的服务器发起请求。那幺https是否仍然可以通过这样的方式进行代理? 先简单说下SSL/TLS,SSL/TLS协议是为了解决这三大风险而设计的 (1) 所有信息都是加密传播,第三方无法窃听。 (2)

  • 问题内容: 我尝试像这样在python中使用https代理: 是从文件读取的代理,格式为ip:port。我在浏览器中检查了这个https代理,它可以工作。但是在python中,此代码挂起了几秒钟,然后出现异常: 我尝试使用socks5代理,它适用于安装了PySocks的socks5代理。但是对于https我有这个例外,有人可以帮我吗 问题答案: 为指定代理列表时,密钥是协议,值是domain /