首页 >后端开发 >Golang >如何在不处理重定向的情况下在 Go 中执行基本身份验证?

如何在不处理重定向的情况下在 Go 中执行基本身份验证?

Susan Sarandon
Susan Sarandon原创
2024-12-26 08:25:08428浏览

How Can I Perform Basic Authentication in Go Without Handling Redirects?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn