web-dev-qa-db-fra.com

Configuration du proxy pour le client HTTP

J'essaie de configurer le client HTTP pour qu'il utilise un proxy, mais je ne comprends pas très bien comment le faire. La documentation a plusieurs références au "proxy" mais aucune des fonctions ne semble permettre de définir le proxy. J'ai besoin de quelque chose comme ça:

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

Une idée de comment faire cela dans Go?

40
laurent

lukad est correct, vous pouvez définir le HTTP_PROXY variable d'environnement, si vous le faites, Go l'utilisera par défaut.

Frapper:

export HTTP_PROXY="http://proxyIp:proxyPort"

Aller:

os.Setenv("HTTP_PROXY", "http://proxyIp:proxyPort")

Vous pouvez également créer votre propre http.Client qui DOIT utiliser un proxy quelle que soit la configuration de l'environnement:

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

Ceci est utile si vous ne pouvez pas dépendre de la configuration de l'environnement ou ne souhaitez pas le modifier.

Vous pouvez également modifier le transport par défaut utilisé par le "net/http "package. Cela affecterait l'ensemble de votre programme (y compris le client HTTP par défaut).

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

Go utilisera le proxy défini dans la variable d'environnement HTTP_PROXY si c'est réglé. Sinon, il n'utilisera aucun proxy.

Vous pouvez le faire comme ceci:

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

Puissiez-vous également essayer ceci:

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

Pour une manière alternative, vous pouvez également utiliser GoRequest qui a une fonctionnalité que vous pouvez définir facilement proxy pour toute demande unique.

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()

Ou vous pouvez définir pour l'ensemble à la fois.

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