我试图设置HTTP客户端,使其使用代理,但我不太明白如何做到这一点。文档有多个参考“代理”,但似乎没有一个函数允许定义代理。我需要的是这样的东西:
client := &http.Client{} client.SetProxy("someip:someport") // pseudo code resp, err := client.Get("http://example.com") // do request through proxy
你知道在围棋里怎么做吗?
e5nszbig1#
lukad是正确的,你可以设置HTTP_PROXY环境变量,如果你这样做,Go语言会默认使用它。重击:
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客户端)。
net/http
proxyUrl, err := url.Parse("http://proxyIp:proxyPort") http.DefaultTransport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)}
1cosmwyk2#
Go语言会使用环境变量HTTP_PROXY中定义的代理(如果设置了的话),否则就不使用代理。你可以这样做:
os.Setenv("HTTP_PROXY", "http://someip:someport") resp, err := http.Get("http://example.com") if err != nil { panic(err) }
b5lpy0ml3#
也许你也可以试试这个:
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
jslywgbw4#
如果你运行这样的程序:
HTTP_PROXY=89.x.y.z path_to_program
然后只为该命令设置HTTP_PROXY设置,如果您不想为整个shell会话设置HTTP_PROXY设置,这很有用。没有设置与路径之间;如果放置分号,它将为shell设置(但不导出)HTTP_PROXY
mnowg1ta5#
Go语言内置代理的使用在DefaultTransport中有简要介绍:
DefaultTransport
// DefaultTransport .... It uses HTTP proxies // as directed by the $HTTP_PROXY and $NO_PROXY (or $http_proxy and // $no_proxy) environment variables. var DefaultTransport RoundTripper = &Transport{ Proxy: ProxyFromEnvironment,
这说明了从DefaultTransport创建自定义Transports与从头开始创建自定义Transports相比的有效性,以便利用内置的ProxyFromEnvironment函数
ProxyFromEnvironment
g6ll5ycj6#
另一种方法是,您也可以使用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()
dsekswqp7#
正在添加到已接受的答案。如果您的代理需要用户名和密码沿着IP,则
变成
export HTTP_PROXY="http://PROXY_LOGIN:PROXY_PASS@proxyIp:proxyPort"
7条答案
按热度按时间e5nszbig1#
lukad是正确的,你可以设置
HTTP_PROXY
环境变量,如果你这样做,Go语言会默认使用它。重击:
开始:
您也可以构建自己的http.Client,无论环境配置如何,该客户端都必须使用代理:
如果您不能依赖环境的配置,或者不想修改它,这将非常有用。
您也可以修改"
net/http
"包使用的默认传输,这将影响整个程序(包括默认的HTTP客户端)。1cosmwyk2#
Go语言会使用环境变量
HTTP_PROXY
中定义的代理(如果设置了的话),否则就不使用代理。你可以这样做:
b5lpy0ml3#
也许你也可以试试这个:
jslywgbw4#
如果你运行这样的程序:
然后只为该命令设置HTTP_PROXY设置,如果您不想为整个shell会话设置HTTP_PROXY设置,这很有用。没有设置与路径之间;如果放置分号,它将为shell设置(但不导出)HTTP_PROXY
mnowg1ta5#
Go语言内置代理的使用在
DefaultTransport
中有简要介绍:这说明了从
DefaultTransport
创建自定义Transports与从头开始创建自定义Transports相比的有效性,以便利用内置的ProxyFromEnvironment
函数g6ll5ycj6#
另一种方法是,您也可以使用GoRequest,它具有一个特性,您可以轻松地为任何单个请求设置代理。
或者你可以马上把一切准备好。
dsekswqp7#
正在添加到已接受的答案。如果您的代理需要用户名和密码沿着IP,则
变成