如何在不使用错误处理的情况下在 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中文网其他相关文章!