2013-02-02 15 views
29

プロキシを使用するようにHTTPクライアントを設定しようとしていますが、どうやってそれを行うのかよくわかりません。ドキュメンテーションは "proxy"への複数の参照を持っていますが、どの関数もプロキシの定義を許可していないようです。私が必要なのは次のようなものです:HTTPクライアント用にプロキシを設定する

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

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

答えて

70

あなたはこの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クライアントを含む)に影響します。

proxyUrl, err := url.Parse("http://proxyIp:proxyPort") 
http.DefaultTransport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)} 
+0

実際には、それぞれ異なるプロキシを使用して複数のリクエストを同時に送信する必要があるため、2番目の解決策がおそらく必要なものです。しかし、それは動作していないようです、私はすべてのプロキシでこのエラーが発生しています: 'Get http://stackoverflow.com:http:プロキシへの接続エラー87.236.233.92:8080:GetServByName:要求された名前は妥当だが、要求されたタイプのデータは見つからなかった。 –

+0

私はこの質問に答えました - http://stackoverflow.com/q/14669958/561309 –

+0

FYI: 'url'は[net/url]にあります(https://golang.org/pkg/net/url)。 /) –

6

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

あなたはこのようにそれを行うことができます:lukadが正しい

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

FYI - 「パニック」後の「リターン」(http://blog.golang.org/defer-panic-and-recover)。 –

2

あなたも、この試みることができる可能性があり:代替方法について

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 
0

を、あなたも、あなたが任意の単一の要求のために簡単にプロキシを設定することができた特徴を持っている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

gorequestはソックスプロキシをサポートしていません –

関連する問題