Maison >développement back-end >Golang >Comment puis-je effectuer une authentification de base dans Go sans gérer les redirections ?

Comment puis-je effectuer une authentification de base dans Go sans gérer les redirections ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-26 08:25:08432parcourir

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

Comment puis-je demander une authentification de base sans redirection dans Go sans utiliser la gestion des erreurs ?

Lors de l'interaction avec une API REST qui renvoie des redirections 302, l'obtention de l'en-tête HTTP Location peut être difficile sans redirection.

Solution :

Comme alternative à la gestion des erreurs, pensez à utiliser la fonction CheckRedirect suivante pour votre client HTTP :

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

Ceci une simple modification informe le package HTTP de ne pas suivre les redirections. Au lieu de cela, il renvoie la dernière réponse reçue avec un corps non fermé et aucune erreur.

Pour illustrer, voici une version mise à jour du code fourni :

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

}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn