首頁 >後端開發 >Golang >如何在不處理重定向的情況下在 Go 中執行基本身份驗證?

如何在不處理重定向的情況下在 Go 中執行基本身份驗證?

Susan Sarandon
Susan Sarandon原創
2024-12-26 08:25:08432瀏覽

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