簡體   English   中英

為HTTP客戶端設置代理

[英]Setting up proxy for HTTP client

我正在嘗試設置 HTTP 客戶端,以便它使用代理,但我不太明白該怎么做。 該文檔多次引用“代理”,但似乎沒有任何功能允許定義代理。 我需要的是這樣的:

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

知道如何在 Go 中執行此操作嗎?

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

如果設置了,Go 將使用環境變量HTTP_PROXY定義的代理。 否則它將不使用代理。

你可以這樣做:

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

你也可以試試這個:

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

如果你運行這樣的東西:

HTTP_PROXY=89.x.y.z path_to_program

然后只為該命令設置 HTTP_PROXY 設置,如果您不想為整個 shell 會話設置它,這很有用。 注意:沒有; 在設置和路徑之間; 如果你放一個分號,它會為那個 shell 設置(但不導出)HTTP_PROXY

對於另一種方式,您還可以使用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()

DefaultTransport簡要記錄了 Go 內置代理的使用:

// 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函數的ProxyFromEnvironment

添加到接受的答案。 如果您的代理需要用戶名和密碼以及 IP,則

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

成為

export HTTP_PROXY="http://PROXY_LOGIN:PROXY_PASS@proxyIp:proxyPort"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM