首頁 >後端開發 >Golang >在使用基本驗證進行初步驗證後,如何在 Go 中對後續 HTTP 請求進行驗證?

在使用基本驗證進行初步驗證後,如何在 Go 中對後續 HTTP 請求進行驗證?

Barbara Streisand
Barbara Streisand原創
2024-11-14 19:24:02526瀏覽

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)
}

這裡🎜>這裡🎜>這裡的問題是第二個HTTP 呼叫失敗並出現401 存取被拒絕錯誤。

為什麼會發生這種情況?

原因是第二個請求不包含第一個請求期間所取得的會話 cookie。為了解決這個問題,我們需要建立一個 cookie jar 來儲存和跨請求重複使用 cookie。

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]
}

在 main 函數中:

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

進行這些更改後,第二個請求將擁有成功驗證身份並從伺服器檢索詳細資訊所需的 cookie。

以上是在使用基本驗證進行初步驗證後,如何在 Go 中對後續 HTTP 請求進行驗證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn