プロキシを使用するようにHTTPクライアントをセットアップしようとしていますが、その方法を十分に理解できません。ドキュメントには「プロキシ」への複数の参照がありますが、どの関数もプロキシの定義を許可していないようです。私が必要なのは次のようなものです:
client := &http.Client{}
client.SetProxy("someip:someport") // pseudo code
resp, err := client.Get("http://example.com") // do request through proxy
Goでこれを行う方法はありますか?
lukadが正しい場合、HTTP_PROXY
環境変数を設定できます。これを行うと、Goはデフォルトでそれを使用します。
バッシュ:
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)}
Goは、環境変数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()