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
Lepaskan: 2024-12-26 08:25:08
asal
436 orang telah melayarinya

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
}
Salin selepas log masuk

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

}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan