转RoundTrip /传输代理地址

时间:2016-10-04 09:10:55

标签: go httpserver http-proxy

据我所知,http.Transport的Proxy字段要求生成代理服务器地址的函数。所以这是我的往返者:

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

所以代理的类型是func(*Request) (*url.URL, error)。这会链接到服务器,稍后会调用:

response := roundtripper.RoundTrip(request)

返回响应。现在有什么方法可以知道使用什么代理地址来获得此响应吗? (因为我的Calculateproxy函数只是随机地址)

1 个答案:

答案 0 :(得分:0)

让Proxy功能添加标头以记录使用的代理服务器:

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")