2016-10-04 57 views
1

我知道http.Transport的代理字段要求生成代理服務器地址的函數。所以這是我要求RoundTripper:Go RoundTrip /傳輸代理地址

roundtripper := &http.Transport{ 
    Proxy: proxyrouter.Calculateproxy, 
... 
} 

所以代理的類型是func(*Request) (*url.URL, error)。這被鏈接到服務器,並在稍後調用:

response := roundtripper.RoundTrip(request) 

它返回響應。現在有什麼方法可以知道使用哪個代理地址來獲得此響應? (因爲我Calculateproxy功能只需要隨機地址)

+0

參考你需要檢查標題。但是,我不確定他們是否會出現在傳輸層將它們添加到私人[額外頁眉部分](https://golang.org/src/net/http/transport.go#L289)中。無論如何轉儲req resp標頭?他們可能會給你一個線索。 – algrebe

回答

0

讓代理功能添加一個頭記錄使用的代理服務器:

Transport{ 
    Proxy: func(req *Request) (*url.URL, error) { 
     p, err := proxyrouter.Calculateproxy(req) 
     if err != nil { 
      return err 
     } 
     req.Header.Set("X-Proxy-Addr", p.String()) 
     return req, nil 
    }, 
} 

http.Response有始發請求

proxy := resp.Request.Header.Get("X-Proxy-Addr") 
+0

是的,我認爲這是唯一的方式..雖然我很關心安全問題在這裏。 –

+0

@PieterjanLambein:沒有任何安全問題。代理已經通過它們的地址在「已轉發」報頭的「by」字段中,或在「Via」報頭中,或者只由主機記錄連接地址。如果您仍然擔心,請使用與程序執行之外的任何內容都不相關的不透明標識符。 – JimB

+0

好的,非常感謝@JimB! –