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 중국어 웹사이트의 기타 관련 기사를 참조하세요!