首頁 >後端開發 >Golang >如何在 Go 中處理 HTTP 請求的驗證 Cookie?

如何在 Go 中處理 HTTP 請求的驗證 Cookie?

DDD
DDD原創
2024-11-08 22:56:02517瀏覽

How to Handle Authentication Cookies for HTTP Requests in Go?

改進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 請求:

身份驗證成功後,儘管伺服器端沒有問題,但後續對「/Details」的請求失敗,並出現401 拒絕存取錯誤。

解決方案:
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 來管理會話資訊。 Go 的HTTP 用戶端預設不會處理此問題,因此我們必須定義自訂cookie jar 實作:
    jar := &myjar{}
    jar.jar = make(map[string] []*http.Cookie)
    client.Jar = jar

在main 函數中,初始化自訂cookie jar 並將其指派給HTTP 用戶端:透過此實現,後續請求可以成功存取「/Details」端點。

以上是如何在 Go 中處理 HTTP 請求的驗證 Cookie?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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