在Go HTTP 用戶端中停用自動重定向
當API 端點傳回具有下列內容的HTTP 302 重新導向時,Go HTTP 用戶端會自動遵循HTTP 重定向: HTTP 位置標頭。在某些情況下,這種行為可能是不可取的,例如當您需要捕獲 HTTP Location 標頭以供以後處理時。
停用自動重定向的常見方法涉及覆寫客戶端的 CheckRedirect 函數。然而,這個解決方案可能感覺像是駭客,因為它將 HTTP 重定向視為錯誤,但事實並非如此。
更優雅的解決方案是使用 http.Transport 來設定客戶端的行為:
import ( "net/http" ) // Create a custom round-trip transport transport := &http.Transport{ DisableKeepAlives: true, } // Create an HTTP client with the custom transport client := &http.Client{ Transport: transport, }
在此設定中,DisableKeepAlives 欄位設定為true,這會阻止客戶端保持持久連接,從而避免需要攔截
或者,您可以使用以下程式碼明確停用重定向:
client := &http.Client{ CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }, }
使用此程式碼,HTTP 套件會自動識別不應遵循重定向,但不會拋出任何異常錯誤。這允許您使用基本驗證發出 HTTP 請求,同時停用自動重新導向,而無需訴諸複雜的錯誤處理。
以上是如何在 Go HTTP 用戶端中停用自動重定向?的詳細內容。更多資訊請關注PHP中文網其他相關文章!