web-dev-qa-db-ja.com

HTTPクライアントのプロキシを設定する

プロキシを使用するようにHTTPクライアントをセットアップしようとしていますが、その方法を十分に理解できません。ドキュメントには「プロキシ」への複数の参照がありますが、どの関数もプロキシの定義を許可していないようです。私が必要なのは次のようなものです:

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

Goでこれを行う方法はありますか?

40
laurent

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)}
97
voidlogic

Goは、環境変数HTTP_PROXYが設定されている場合、環境変数で定義されたプロキシを使用します。それ以外の場合は、プロキシを使用しません。

次のようにできます:

os.Setenv("HTTP_PROXY", "http://someip:someport")
resp, err := http.Get("http://example.com")
if err != nil {
    panic(err)
}
9
lukad

あなたもこれを試すことができます:

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
5
HeyJoy

別の方法として、 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()
0
A-letubby