Go 中的基本HTTP 驗證處理
在Go 中實現基本HTTP 驗證時,可能會出現一些意想不到的挑戰。本文深入探討了嘗試實作基本 HTTP 驗證時遇到的常見問題。
問題:執行以下程式碼時遇到「不支援的協定方案」錯誤:
func basicAuth() string { var username string = "foo" var passwd string = "bar" client := &http.Client{} req, err := http.NewRequest("GET", "mydomain.example", nil) req.SetBasicAuth(username, passwd) resp, err := client.Do(req) if err != nil{ log.Fatal(err) } bodyText, err := ioutil.ReadAll(resp.Body) s := string(bodyText) return s }
原因:當發生重新導向時,Go-lang 會丟棄任何指定的標頭,包括為基本驗證設定的Authorization 標頭。
解決方案:修正針對這個問題,可以實作一個自訂的重定向策略函數:
func redirectPolicyFunc(req *http.Request, via []*http.Request) error { req.Header.Add("Authorization", "Basic "+basicAuth("username1", "password123")) return nil }
此函數確保在重定向期間加回Authorization標頭,有效保留身分驗證憑證。
實作:
func main() { client := &http.Client{ Jar: cookieJar, CheckRedirect: redirectPolicyFunc, } req, err := http.NewRequest("GET", "http://localhost/", nil) req.Header.Add("Authorization", "Basic "+basicAuth("username1", "password123")) resp, err := client.Do(req) }
透過利用重定向策略功能,指定的標頭(包括用於基本驗證的授權標頭)將在整個重定向過程中持續存在,確保與目標伺服器成功進行身份驗證。
以上是為什麼 Go 中發生重定向時基本 HTTP 認證會失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!