如何在不使用錯誤處理的情況下在 Go 中請求基本身份驗證而不進行重定向?
與傳回 302 重定向的 REST API 互動時,如果沒有自動取得 HTTP Location 標頭可能會很困難重新導向。
解決方案:
作為錯誤處理的替代方法,請考慮為您的HTTP 用戶端使用以下CheckRedirect 函數:
func noRedirect(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }
This簡單的修改通知HTTP 套件不要遵循重定向。相反,它會傳回最後收到的回應,其中包含未封閉的正文且沒有錯誤。
為了說明這一點,這裡是所提供程式碼的更新版本:
package main import ( "fmt" "io/ioutil" "net/http" ) var BASE_URL = "https://api.example.com/v1" var STORMPATH_API_KEY_ID = "xxx" var STORMPATH_API_KEY_SECRET = "xxx" func main() { client := &http.Client{ CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }, } req, err := http.NewRequest("GET", BASE_URL+"/tenants/current", nil) req.SetBasicAuth(STORMPATH_API_KEY_ID, STORMPATH_API_KEY_SECRET) resp, err := client.Do(req) // If we get here, it means one of two things: either this http request // actually failed, or we got an http redirect response, and should process it. if err != nil { if resp.StatusCode == 302 { fmt.Println("got redirect") } else { panic("HTTP request failed.") } } defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) }
以上是如何在不處理重定向的情況下在 Go 中執行基本身份驗證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!