首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用代理执行https请求

如何使用代理执行https请求
EN

Stack Overflow用户
提问于 2017-03-08 03:20:19
回答 1查看 21.1K关注 0票数 7

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

代码语言:javascript
复制
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,但是如果我设置了代理,脚本:

代码语言:javascript
复制
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

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

我总是收到“坏请求”,我读了docs:https://golang.org/pkg/net/http/

.从Go 1.6开始,当使用HTTPS时,http包具有对HTTP/2协议的透明支持。必须禁用HTTP/2的程序可以通过将Transport.TLSNextProto (针对客户端)或Server.TLSNextProto (用于服务器)设置为非零的空映射来实现。另外,目前支持下列GODEBUG环境变量:.

因此,我试图阻止http2:

代码语言:javascript
复制
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”),结果是一样的。这是登录服务器:

代码语言:javascript
复制
{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

那么,戈朗是否通过代理支持https客户端请求?怎样才能得到正确的结果?

EN

回答 1

Stack Overflow用户

发布于 2019-09-04 20:46:18

您的Client.Transport.Proxy配置似乎没有任何问题。两种尝试的方法(ProxyURLProxyFromEnvironment)都应该可以很好地指定前向代理

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

值得注意的是,不管多么不可能,随后的客户端调用不会以某种方式绕过WriteProxy的使用,而是直接调用 --因为这将违背代理规范。

考虑到这里提供的信息,“坏请求”可能表示您正在到达代理,但它没有作为一个通用的HTTP/HTTPS转发代理正确工作,这正是Client.Transport.Proxy所指定的。

也许会在这里添加一些清晰性:如何使用Nginx作为HTTP/HTTPS代理服务器?。总之,NGINX通常不是用作前向代理,所以这可能不是您想要做的事情。

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

附带注意:如果没有另外指定,&http.Client{}将使用自动包含ProxyFromEnvironmentDefaultTransport,因此只有在构建非默认传输(如问题中为指定InsecureSkipVerify而做的那样)或希望有特定于应用程序的代理合并时,才需要额外的代理配置。而且,重复一遍,只有在使用前向代理时才需要客户端代理配置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42662369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档