ホームページ  >  記事  >  バックエンド開発  >  基本認証を使用した初期認証の後、Go で後続の HTTP リクエストを認証するにはどうすればよいですか?

基本認証を使用した初期認証の後、Go で後続の HTTP リクエストを認証するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-14 19:24:02481ブラウズ

How can I authenticate subsequent HTTP requests in Go after an initial authentication using basic auth?

Go からの認証された HTTP クライアント リクエスト

次のコード スニペットを考えてみましょう:

client := &http.Client{}

/* Authenticate */
req, err := http.NewRequest("GET", "http://164.99.113.32/Authenticate", nil)
req.SetBasicAuth("<username>", "<password>")
resp, err := client.Do(req)
if err != nil {
    fmt.Printf("Error : %s", err)
}

/* Get Details */
req.URL, _ = url.Parse("http://164.99.113.32/Details")
resp, err = client.Do(req)
if err != nil {
    fmt.Printf("Error : %s", err)
}

ここでの問題は、 2 番目の HTTP 呼び出しは、401 アクセス拒否エラーで失敗します。

なぜこれが起こるのですか?

その理由は、2 番目のリクエストに、最初に作成されたセッション Cookie が含まれていないためです。最初のリクエスト時に取得されます。これを解決するには、リクエスト間で Cookie を保存して再利用するための Cookie jar を作成する必要があります。

type myjar struct {
    jar map[string] []*http.Cookie
}

func (p* myjar) SetCookies(u *url.URL, cookies []*http.Cookie) {
    fmt.Printf("The URL is : %s\n", u.String())
    fmt.Printf("The cookie being set is : %s\n", cookies)
    p.jar [u.Host] = cookies
}

func (p *myjar) Cookies(u *url.URL) []*http.Cookie {
    fmt.Printf("The URL is : %s\n", u.String())
    fmt.Printf("Cookie being returned is : %s\n", p.jar[u.Host])
    return p.jar[u.Host]
}

メイン関数内:

    jar := &myjar{}
    jar.jar = make(map[string] []*http.Cookie)
    client.Jar = jar

これらの変更により、2 番目のリクエストは次のようになります。認証を成功させ、サーバーから詳細を取得するために必要な Cookie を持っています。

以上が基本認証を使用した初期認証の後、Go で後続の HTTP リクエストを認証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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