60

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

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

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

4

6 に答える 6

138

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)}
于 2013-02-02T15:52:39.007 に答える
13

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

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

os.Setenv("HTTP_PROXY", "http://someip:someport")
resp, err := http.Get("http://example.com")
if err != nil {
    panic(err)
}
于 2013-02-02T12:39:32.187 に答える
7

これも試してみてください:

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
于 2014-01-15T08:38:19.097 に答える
1

このようなものを実行する場合:

HTTP_PROXY=89.x.y.z path_to_program

次に、HTTP_PROXY設定がそのコマンドに対してのみ設定されます。これは、シェルセッション全体に対して設定したくない場合に役立ちます。注:ありません; 設定とパスの間。セミコロンを付けると、そのシェルにHTTP_PROXYが設定されます(ただし、エクスポートはされません)。

于 2020-03-16T11:50:56.943 に答える
1

Goの組み込みプロキシの使用については、以下に簡単に説明されてい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を利用するために、最初からカスタムトランスポートを作成することとゼロからカスタムトランスポートを作成することの有用性を示しています。ProxyFromEnvironment

于 2021-08-15T17:47:23.177 に答える
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()
于 2014-05-12T09:28:25.933 に答える