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 サイトの他の関連記事を参照してください。