![](/img/trans.png)
[英]Convert interface{} parameter into *http.Request or *http.Response in Go
[英]Go http.Request Header on Redirect and Proxy
https://groups.google.com/forum/#!topic/golang-nuts/OwGvopYXpwE
如該線程所示,當http.Client
發送重定向請求時,標頭將重置。
有類似的解決方法:
client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
if len(via) >= 10 {
return fmt.Errorf("too many redirects")
}
if len(via) == 0 {
return nil
}
for attr, val := range via[0].Header {
if _, ok := req.Header[attr]; !ok {
req.Header[attr] = val
}
}
return nil
}
但是我的問題是,如果我想通過代理服務器發出HTTP請求,該怎么做。
當HTTP請求通過代理服務器時,標頭是否全部重置? 我是否必須在代理中設置另一個http.Client
?
我使用https://github.com/elazarl/goproxy設置了代理服務器
謝謝,
我簡要地看了一下代碼,看起來goproxy不會以任何特殊方式處理3XX響應-它們只是被路由回您的客戶端,因此它可以做出相應的反應。 對於您的情況,您將發出所有標頭都已設置的另一個請求。
如果不是您關心的問題,並且您只是想知道是否僅存在代理就需要在客戶端進行任何黑客操作,那么不, http.Client
在使用代理時不會刪除任何標頭,甚至不知道有涉及的代理人。
您可以通過設置自己的簡單服務器(例如,在Go中)輕松測試這些假設,該服務器將返回重定向響應(返回至自身或某些nc
偵聽器)並打印所有標頭。 通過代理將客戶端路由到服務器時,可以確保在服務器端一切正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.