ホームページ >バックエンド開発 >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 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。