ホームページ  >  記事  >  バックエンド開発  >  Go で HTTP リクエストの認証 Cookie を処理するにはどうすればよいですか?

Go で HTTP リクエストの認証 Cookie を処理するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-08 22:56:02482ブラウズ

How to Handle Authentication Cookies for HTTP Requests in Go?

Go での HTTP クエリの認証処理の改善

問題:

次のコードを考えてみましょう。 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)
}

認証に成功すると、サーバー側に問題がないにもかかわらず、「/Details」への後続のリクエストが 401 アクセス拒否エラーで失敗します。

解決策:

これを解決するには、Cookie jar を利用してセッション情報を管理する必要があります。 Go の HTTP クライアントはデフォルトではこれを処理しないため、カスタム 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]
}

メイン関数で、カスタム Cookie jar を初期化し、HTTP クライアントに割り当てます:

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

この実装により、後続のリクエストは「/Details」エンドポイントに正常にアクセスできます。

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

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