我试图建立HTTP客户端,以便它使用一个代理,但是我不是很了解如何做到这一点。 该文件有多个参考“代理”,但没有的功能似乎允许定义代理。 我需要的是这样的:
client := &http.Client{}
client.SetProxy("someip:someport") // pseudo code
resp, err := client.Get("http://example.com") // do request through proxy
任何想法如何做到这一点进去吗?
我试图建立HTTP客户端,以便它使用一个代理,但是我不是很了解如何做到这一点。 该文件有多个参考“代理”,但没有的功能似乎允许定义代理。 我需要的是这样的:
client := &http.Client{}
client.SetProxy("someip:someport") // pseudo code
resp, err := client.Get("http://example.com") // do request through proxy
任何想法如何做到这一点进去吗?
lukad是正确的,你可以设置HTTP_PROXY
环境变量,如果你这样做围棋将默认使用它。
击:
export HTTP_PROXY="http://proxyIp:proxyPort"
走:
os.Setenv("HTTP_PROXY", "http://proxyIp:proxyPort")
您还可以构建自己的http.Client必须使用代理,无论环境的配置:
proxyUrl, err := url.Parse("http://proxyIp:proxyPort")
myClient := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyUrl)}}
如果你不能依赖于环境的配置,或者不想修改它,这非常有用。
您还可以修改的“使用默认传输net/http
”包。 这会影响你的整个程序(包括默认的HTTP客户端)。
proxyUrl, err := url.Parse("http://proxyIp:proxyPort")
http.DefaultTransport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)}
去将使用在环境变量定义的代理HTTP_PROXY
如果它被设置。 否则,将不使用代理服务器。
你可以做这样的:
os.Setenv("HTTP_PROXY", "http://someip:someport")
resp, err := http.Get("http://example.com")
if err != nil {
panic(err)
}
愿你也可以试试这个:
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
对于另一种方式,你也可以使用GoRequest其中有一个功能,您可以为任何一个请求轻松设置代理。
request := gorequest.New()
resp, body, errs:= request.Proxy("http://proxy:999").Get("http://example.com").End()
resp2, body2, errs2 := request.Proxy("http://proxy2:999").Get("http://example2.com").End()
或者,你可以为整个一次性设置。
request := gorequest.New().Proxy("http://proxy:999")
resp, body, errs:= request.Get("http://example.com").End()
resp2, body2, errs2 := request.Get("http://example2.com").End()