问题描述
我正在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中带来了一些麻烦>
谢谢!
解决方法
您正在将代理身份验证标头添加到将发送到目标服务器的请求中。您要做的就是将此标头添加到transport
。
将req.Header.Add("Proxy-Authorization",basicAuth)
替换为
transport.ProxyConnectHeader = http.Header{}
transport.ProxyConnectHeader.Add("Proxy-Authorization",basicAuth)