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