net - Configuración del proxy para el cliente HTTP
golang reverse proxy (4)
Estoy tratando de configurar el cliente HTTP para que use un proxy, sin embargo, no puedo entender cómo hacerlo. La documentación tiene múltiples referencias a "proxy" pero ninguna de las funciones parece permitir definir el proxy. Lo que necesito es algo como esto:
client := &http.Client{}
client.SetProxy("someip:someport") // pseudo code
resp, err := client.Get("http://example.com") // do request through proxy
¿Alguna idea de cómo hacer esto en Go?
De forma alternativa, también puede usar GoRequest que tiene una función que le permite configurar el proxy fácilmente para cualquier solicitud individual.
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()
O puede establecer para el todo a la vez.
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()
Go usará el proxy definido en la variable de entorno HTTP_PROXY
si está configurado. De lo contrario, no usará ningún proxy.
Podrías hacerlo así:
os.Setenv("HTTP_PROXY", "http://someip:someport")
resp, err := http.Get("http://example.com")
if err != nil {
panic(err)
}
Puede que también intentes esto:
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
lukad es correcto, puede establecer la variable de entorno HTTP_PROXY
, si lo hace, Go lo usará de manera predeterminada.
Intento:
export HTTP_PROXY="http://proxyIp:proxyPort"
Ir:
os.Setenv("HTTP_PROXY", "http://proxyIp:proxyPort")
También podría construir su propio http.Client que DEBE usar un proxy independientemente de la configuración del entorno:
proxyUrl, err := url.Parse("http://proxyIp:proxyPort")
myClient := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyUrl)}}
Esto es útil si no puede depender de la configuración del entorno o si no desea modificarlo.
También puede modificar el transporte predeterminado utilizado por el paquete " net/http
". Esto afectaría a su programa completo (incluido el cliente HTTP predeterminado).
proxyUrl, err := url.Parse("http://proxyIp:proxyPort")
http.DefaultTransport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)}