我正在努力让一个人进来https://www.google.com https://www.google.com使用带有身份验证的代理,我已经传递了标头参数
代理授权
但代理服务器返回
需要代理身份验证
code:
package main
import (
"crypto/tls"
"encoding/base64"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"os"
)
func main() {
req, _ := http.NewRequest("GET", "https://www.google.com.br", nil)
req.Header.Set("Host", "www.google.com.br")
proxyURL := url.URL{
Host: "IP-HERE:PORT-HEERE"}
transport := &http.Transport{
Proxy: http.ProxyURL(&proxyURL),
TLSClientConfig: &tls.Config{},
}
client := &http.Client{Transport: transport}
req.RequestURI = ""
auth := fmt.Sprintf("USER:PASSWORD")
basic := "Basic " + base64.StdEncoding.EncodeToString([]byte(auth))
req.Header.Add("Proxy-Authorization", basic)
resp, err := client.Do(req)
if err != nil {
fmt.Printf("erro: %s", err)
}
fmt.Printf("code: %s", resp.StatusCode)
htmlData, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println(os.Stdout, string(htmlData))
}
我必须传递另一个参数吗?
当我执行一项进入时http://www.google.com.br http://www.google.com.br,没有 https.. 代理身份验证成功。为什么?
我找到了解决方案。 Golang 不会在方法 CONNECT 中传递标头参数,因此参数 Proxy-Authorization 不会发送到代理服务器。
为了解决这个问题,将 ProxyConnectHeader 字段添加到了 Transport 结构中。但此更改在发布之前,此更改仅在 master 中。
为了使用 master 的 golang 测试这个新领域,我在 github 上做了一个项目并进行了工作。
链接到 golang 路径 https://github.com/golang/go/commit/b06c93e45b7b03a5d670250ff35e42d62aface82
链接到 github 中测试这个新领域的项目 https://github.com/LeoCBS/poc-proxy-https
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)