Setting up proxy for HTTP client

后端 未结 5 2059
抹茶落季
抹茶落季 2020-12-12 18:15

I\'m trying to setup the HTTP client so that it uses a proxy, however I cannot quite understand how to do it. The documentation has multiple reference to \"proxy\" but none

相关标签:
5条回答
  • 2020-12-12 18:37

    lukad is correct, you could set the HTTP_PROXY environment variable, if you do this Go will use it by default.

    Bash:

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

    Go:

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

    You could also construct your own http.Client that MUST use a proxy regardless of the environment's configuration:

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

    This is useful if you can not depend on the environment's configuration, or do not want to modify it.

    You could also modify the default transport used by the "net/http" package. This would affect your entire program (including the default HTTP client).

    proxyUrl, err := url.Parse("http://proxyIp:proxyPort")
    http.DefaultTransport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)}
    
    0 讨论(0)
  • 2020-12-12 18:41

    For an alternative way, you can also use GoRequest which has a feature that you can set proxy easily for any single request.

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

    Or you can set for the whole at once.

    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 讨论(0)
  • May you could also try this:

    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 讨论(0)
  • 2020-12-12 18:52

    Go will use the the proxy defined in the environment variable HTTP_PROXY if it's set. Otherwise it will use no proxy.

    You could do it like this:

    os.Setenv("HTTP_PROXY", "http://someip:someport")
    resp, err := http.Get("http://example.com")
    if err != nil {
        panic(err)
    }
    
    0 讨论(0)
  • 2020-12-12 18:54

    If you run something like this:

    HTTP_PROXY=89.x.y.z path_to_program
    

    Then the HTTP_PROXY setting is set for that command only, which is useful if you don't want to set it for the whole shell session. Note: there's no ; between the setting and the path; if you put a semicolon, it would set (but not export) HTTP_PROXY for that shell

    0 讨论(0)
提交回复
热议问题