亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何知道http客戶端在給定請求中使用的代理

如何知道http客戶端在給定請求中使用的代理

Go
喵喵時光機 2022-08-01 09:52:24
我正在通過一些代理服務器執行一些請求。定義要使用的代理 URL 的函數將從代理列表中隨機選擇。我想知道對于給定的請求,正在使用哪個代理URL。據我所知,使用代理服務器時,http標頭保持不變,但tcp標頭是更改的標頭。下面是一些代碼來說明它(為簡單起見,沒有錯誤處理):func main() {    transport := &http.Transport{Proxy: chooseProxy}    client := http.Client{Transport: transport}    request, err := http.NewRequest(http.MethodGet, "https://www.google.com", nil)    checkErr(err)    // How to know here which proxy was used? Suppose the same client will perform several requests to different URL's.    response, err := client.Do(request)    checkErr(err)    dump, _ := httputil.DumpRequest(response.Request, false)    fmt.Println(dump)}func chooseProxy(request *http.Request) (*url.URL, error) {    proxies := []string{"proxy1", "proxy2", "proxy3"}    proxyToUse := proxies[rand.Intn(len(proxies))]    return url.Parse(proxyToUse)}我假設即使使用相同的客戶端,也會為每個請求調用傳輸中的 Proxy 函數,如“Proxy 指定一個函數以返回給定請求的代理”的文檔。我說的對嗎?
查看完整描述

3 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

您可以修改選擇Proxy函數,以便保存選定的代理。為此,您可以將 chooseProxy func 轉換為一種類型的方法,該方法將用作要保留的信息的存儲:


type proxySelector string


func (sel *proxySelector) chooseProxy(request *http.Request) (*url.URL, error) {

    proxies := []string{"proxy1", "proxy2", "proxy3"}


    proxyToUse := proxies[rand.Intn(len(proxies))]


    *sel = proxySelector(proxyToUse) // <-----


    return url.Parse(proxyToUse)

}



func main() {

    var proxy proxySelector

    transport := &http.Transport{Proxy: proxy.chooseProxy}  // <-----

    client := http.Client{Transport: transport}


    request, err := http.NewRequest(http.MethodGet, "https://www.google.com", nil)

    checkErr(err)


    // How to know here which proxy was used? Suppose the same client will perform several requests to different URL's.

    response, err := client.Do(request)

    checkErr(err)


    dump, _ := httputil.DumpRequest(response.Request, false)

    fmt.Println(dump)

    fmt.Println("Proxy:", string(proxy))  // <-----

}


查看完整回答
反對 回復 2022-08-01
?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

一些HTTP代理添加了一個標頭來告訴它們是誰。Via

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Via


查看完整回答
反對 回復 2022-08-01
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

包含目標 URI 的請求作為參數提供給 。因此,您可以在函數中已經擁有正確的映射,您只需要檢查vs。 那里。requestchooseProxychooseProxyproxyToUserequest.URL

如果您并不真正信任此映射實際完成的代碼,則需要查看代碼外部。例如,您可以使用Wireshark查看實際的網絡流量,以查看訪問哪個代理。


查看完整回答
反對 回復 2022-08-01
  • 3 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號