我如何在 golang 中授权 user:pass 代理
How do I auth a user:pass proxy in golang
我正在尝试在 golang 的请求中使用 user:pass 代理,当我 运行 它
时,我得到了“需要代理身份验证”
这是我的代码:
var ip string = "123.45.67.890:54400:user:pass"
func main() {
proxy := "http://" + ip
proxyURL, err := url.Parse(proxy)
if err != nil {
log.Fatal(err)
}
urlStr := site
url, err := url.Parse(urlStr)
if err != nil {
log.Fatal(err)
}
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
}
jar, _ := cookiejar.New(nil)
client := &http.Client{
Jar: jar,
Transport: transport,
}
req, _ := http.NewRequest("GET", url.String(), nil)
if err != nil {
log.Fatal(err)
}
auth := "johndoe2x:johndoe2x"
basicAuth := "Basic " + base64.StdEncoding.EncodeToString([]byte(auth))
req.Header.Add("Proxy-Authorization", basicAuth)
req.Header.Add("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
req.Header.Add("accept-language", "en-US,en;q=0.9")
req.Header.Add("upgrade-insecure-requests", "1")
req.Header.Add("user-agent", userAgent)
res, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
log.Println("statusCode:", res.StatusCode)
data, err := ioutil.ReadAll(res.Body)
if err != nil {
log.Fatal(err)
}
log.Println(string(data))
}
同样,当我 运行 我得到 Time_here Get "https://site_here/": Proxy Authentication Required
我已经坚持了几个小时,我不确定在 Go 中究竟如何做到这一点,我能够在 JS 中为用户使用 var 并通过,但是这个在 Golang 中给我带来了一些麻烦
提前致谢!
您正在将代理身份验证 header 添加到将转到目标服务器的请求中。你要做的就是把这个 header 添加到 transport
.
将req.Header.Add("Proxy-Authorization", basicAuth)
替换为
transport.ProxyConnectHeader = http.Header{}
transport.ProxyConnectHeader.Add("Proxy-Authorization", basicAuth)
我正在尝试在 golang 的请求中使用 user:pass 代理,当我 运行 它
时,我得到了“需要代理身份验证”这是我的代码:
var ip string = "123.45.67.890:54400:user:pass"
func main() {
proxy := "http://" + ip
proxyURL, err := url.Parse(proxy)
if err != nil {
log.Fatal(err)
}
urlStr := site
url, err := url.Parse(urlStr)
if err != nil {
log.Fatal(err)
}
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
}
jar, _ := cookiejar.New(nil)
client := &http.Client{
Jar: jar,
Transport: transport,
}
req, _ := http.NewRequest("GET", url.String(), nil)
if err != nil {
log.Fatal(err)
}
auth := "johndoe2x:johndoe2x"
basicAuth := "Basic " + base64.StdEncoding.EncodeToString([]byte(auth))
req.Header.Add("Proxy-Authorization", basicAuth)
req.Header.Add("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
req.Header.Add("accept-language", "en-US,en;q=0.9")
req.Header.Add("upgrade-insecure-requests", "1")
req.Header.Add("user-agent", userAgent)
res, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
log.Println("statusCode:", res.StatusCode)
data, err := ioutil.ReadAll(res.Body)
if err != nil {
log.Fatal(err)
}
log.Println(string(data))
}
同样,当我 运行 我得到 Time_here Get "https://site_here/": Proxy Authentication Required
我已经坚持了几个小时,我不确定在 Go 中究竟如何做到这一点,我能够在 JS 中为用户使用 var 并通过,但是这个在 Golang 中给我带来了一些麻烦
提前致谢!
您正在将代理身份验证 header 添加到将转到目标服务器的请求中。你要做的就是把这个 header 添加到 transport
.
将req.Header.Add("Proxy-Authorization", basicAuth)
替换为
transport.ProxyConnectHeader = http.Header{}
transport.ProxyConnectHeader.Add("Proxy-Authorization", basicAuth)