エラー処理を使用せずに Go でリダイレクトせずに基本認証をリクエストするにはどうすればよいですか?
302 リダイレクトを返す REST API と対話する場合、 HTTP Location ヘッダーを自動取得しないと取得が困難になる場合がありますredirection.
解決策:
エラー処理の代わりに、HTTP クライアントに次の CheckRedirect 関数を使用することを検討してください。
func noRedirect(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }
This簡単な変更により、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 中国語 Web サイトの他の関連記事を参照してください。