Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Melaksanakan Pengesahan Asas dalam Go Tanpa Mengendalikan Lencongan?

Bagaimanakah Saya Boleh Melaksanakan Pengesahan Asas dalam Go Tanpa Mengendalikan Lencongan?

Susan Sarandon
Susan Sarandonasal
2024-12-26 08:25:08465semak imbas

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

Bagaimanakah Saya Boleh Meminta Pengesahan Asas Tanpa Mengubah Hala dalam Go Tanpa Menggunakan Pengendalian Ralat?

Apabila berinteraksi dengan REST API yang mengembalikan 302 ubah hala, mendapatkan pengepala Lokasi HTTP boleh menjadi sukar tanpa automatik pengalihan semula.

Penyelesaian:

Sebagai alternatif kepada pengendalian ralat, pertimbangkan untuk menggunakan fungsi CheckRedirect berikut untuk klien HTTP anda:

func noRedirect(req *http.Request, via []*http.Request) error {
    return http.ErrUseLastResponse
}

Ini pengubahsuaian mudah memberitahu pakej HTTP untuk tidak mengikuti ubah hala. Sebaliknya, ia mengembalikan respons yang diterima terakhir dengan isi yang tidak ditutup dan tiada ralat.

Untuk menggambarkan, berikut ialah versi dikemas kini bagi kod yang disediakan:

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))

}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Pengesahan Asas dalam Go Tanpa Mengendalikan Lencongan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn