>백엔드 개발 >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 위치 헤더를 얻는 것이 어려울 수 있습니다. 리디렉션.

해결책:

오류 처리 대신 HTTP 클라이언트에 대해 다음 CheckRedirect 기능을 사용하는 것이 좋습니다.

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

이것은 간단한 수정은 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으로 문의하세요.