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
Libérer: 2024-12-26 08:25:08
original
464 Les gens l'ont consulté

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
}
Copier après la connexion

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

}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal