为HTTP客户端设置代理

lau*_*ent 40 proxy http request go

我正在尝试设置HTTP客户端,以便它使用代理,但我不太明白如何做到这一点.该文档有多个"代理"引用,但似乎没有任何函数可以定义代理.我需要的是这样的:

client := &http.Client{}
client.SetProxy("someip:someport") // pseudo code
resp, err := client.Get("http://example.com") // do request through proxy
Run Code Online (Sandbox Code Playgroud)

知道如何在Go中做到这一点?

voi*_*gic 98

lukad是正确的,您可以设置HTTP_PROXY环境变量,如果您这样做,Go将默认使用它.

击:

export HTTP_PROXY="http://proxyIp:proxyPort"
Run Code Online (Sandbox Code Playgroud)

走:

os.Setenv("HTTP_PROXY", "http://proxyIp:proxyPort")
Run Code Online (Sandbox Code Playgroud)

您也可以构建自己的http.Client,无论环境的配置如何,都必须使用代理:

proxyUrl, err := url.Parse("http://proxyIp:proxyPort")
myClient := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyUrl)}}
Run Code Online (Sandbox Code Playgroud)

如果您不依赖于环境的配置,或者不想修改它,这将非常有用.

您还可以修改" net/http"包使用的默认传输.这会影响整个程序(包括默认的HTTP客户端).

proxyUrl, err := url.Parse("http://proxyIp:proxyPort")
http.DefaultTransport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)}
Run Code Online (Sandbox Code Playgroud)


luk*_*kad 9

Go将使用环境变量中定义的代理(HTTP_PROXY如果已设置).否则它将不使用代理.

你可以这样做:

os.Setenv("HTTP_PROXY", "http://someip:someport")
resp, err := http.Get("http://example.com")
if err != nil {
    panic(err)
}
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考 - "恐慌"之后的"返回"[多余](http://blog.golang.org/defer-panic-and-recover). (2认同)

Hey*_*Joy 5

也可以尝试一下:

url_i := url.URL{}
url_proxy, _ := url_i.Parse(proxy_addr)

transport := http.Transport{}    
transport.Proxy = http.ProxyURL(url_proxy)// set proxy 
transport.TLSClientConfig = &tls.Config{InsecureSkipVerify: true} //set ssl

client := &http.Client{}
client.Transport = transport
resp, err := client.Get("http://example.com") // do request through proxy
Run Code Online (Sandbox Code Playgroud)

  • 我想你的意思是: Transport := &http.Transport{} (2认同)
  • 提示:你不想要 InsecureSkipVerify (2认同)