我无需设置代理即可执行http或https客户端请求,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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,但是如果我设置proxy,则脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 .................... |
我总是收到" Bad request ",我阅读了以下文档:https://golang.org/pkg/net/http/:
.........
从Go 1.6开始,使用HTTPS时,http软件包对HTTP / 2协议具有透明支持。必须禁用HTTP / 2的程序可以通过将Transport.TLSNextProto(对于客户端)或Server.TLSNextProto(对于服务器)设置为非空的空映射来执行此操作。或者,当前支持以下GODEBUG环境变量:
..............
因此,我试图停止http2:
1 2 3 4 5 6 | 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 "),结果是一样的。
这已登录到服务器:
1 | {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客户端请求?如何获得正确的结果?
- 我在代理服务器上测试了您的代码,效果很好。您的代理可能是配置问题。您是否尝试过使用具有此代理的普通Web浏览器?
- 嗨,IanB您的代理服务器是什么?我使用nginx(反向代理)。您是否使用[TLSNextProto]停止http2?
- 我使用鱿鱼代理。不,我没有指定TLSNextProto。反向代理不应要求客户端使用任何特殊的代理配置,即应透明
- 标题的重复项:如何编写程序以使用代理?,但问题不相同。
- 我非常确定问题出在代理URL。具体来说,必须使用HTTP协议访问代理,然后指定HTTPS。
您的
相关问题:如何编程去使用代理?
需要注意的是,随后的客户端调用不会以某种方式绕过WriteProxy的使用,而是直接调用Write,因为这样做会破坏代理规范。
鉴于此处提供的信息,"错误请求"可能表示您正在访问代理,但不能作为
也许可以在此处添加一些清晰度:如何将Nginx用作HTTP / HTTPS代理服务器?总而言之,NGINX通常不用作转发代理,因此也许这不是您要尝试的操作。
如果您尝试将NGINX用作反向代理,则配置是服务器端的问题,您的客户端不需要特殊的代理配置-只需更改您的请求URL即可指向代理。
旁注:如果未另行指定,
- 转发HTTP代理:代理到底如何工作?