go http client 設置連接超時
go 語言的 http 客戶端可以在初始化話的時候通過
client := http.Client{
Timeout: 5 * time.Second,
}
來設置請求超時,即整個 http 請求到完成響應的時間限制。那么如果想另外設置 tcp 連接階段的超時可以這樣玩:
client := http.Client{
Transport: &http.Transport{
Proxy: http.ProxyFromEnvironment,
Dial: (&net.Dialer{
Timeout: 2 * time.Second,
Deadline: time.Now().Add(3 * time.Second),
KeepAlive: 2 * time.Second,
}).Dial,
TLSHandshakeTimeout: 2 * time.Second,
},
Timeout: 5 * time.Second,
}
通過設置 Transport 結構中的 Dial 的屬性來實現。如上面的代碼中,Dial 的 Timetout 是在 tcp 連接時設置的連接超時,Deadline 則會在超過這個時間后強制關閉連接,在連接無響應的時候回有用。KeepAlive 則會發起心跳,檢測連接是否存活。此外,可以設置 TLSHandshakeTimeout 作為 https 握手的超時。具體可以參考 net.Dialer 的文檔。由于直接構造了 Transport 結構,不會自動設置 Proxy 屬性,這里還得再這里補上。可以用 http.ProxyFromEnvironment 表示根據環境變量來設置,即 http_proxy 和 https_proxy 兩個變量設置的 http 代理。如果想強制不使用代理,可以設置為
...
Proxy: func(*http.Request) (*url.URL, error) {return nil, nil},
...
來自: http://xiezhenye.com/2016/05/go-http-client-設置連接超時.html
本文由用戶 JustinaMuni 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!