改進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中文網其他相關文章!