Go往返/传输代理地址

Go往返/传输代理地址,go,httpserver,http-proxy,Go,Httpserver,Http Proxy,我知道http.Transport的Proxy字段需要一个生成代理服务器地址的函数。这是我的往返者: roundtripper := &http.Transport{ Proxy: proxyrouter.Calculateproxy, ... } 因此,代理的类型是func(*Request)(*url.url,error)。这将链接到服务器,稍后将通过以下方式调用: response := roundtripper.RoundTrip(request) 返回响应。现在是否

我知道http.Transport的Proxy字段需要一个生成代理服务器地址的函数。这是我的往返者:

roundtripper := &http.Transport{
    Proxy: proxyrouter.Calculateproxy,
...
}
因此,代理的类型是
func(*Request)(*url.url,error)
。这将链接到服务器,稍后将通过以下方式调用:

response := roundtripper.RoundTrip(request)

返回响应。现在是否有任何方法可以知道用于获取此响应的代理地址?(因为我的Calculateproxy函数只接受随机地址)

让代理函数添加一个头来记录所使用的代理服务器:

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
    },
}
具有对发起请求的引用

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

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

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
    },
}
具有对发起请求的引用

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

您需要检查标题。但是,我不确定它们是否会出现,因为传输层正在将它们添加到私有网络中。是否仍要转储req resp头?他们可能会给你一个线索。你需要检查标题。但是,我不确定它们是否会出现,因为传输层正在将它们添加到私有网络中。是否仍要转储req resp头?他们可能会给你一个线索。是的,我想这是唯一的办法。。虽然我很关心这里的安全问题。@PieterjanLambein:其实没有任何安全问题。通过“转发”头的“发件人”字段中的地址、或“通过”头中的地址,或仅通过记录连接地址的主机,可以知道代理。如果您仍然担心,请使用与程序执行之外的任何内容都不相关的不透明标识符。。虽然我很关心这里的安全问题。@PieterjanLambein:其实没有任何安全问题。通过“转发”头的“发件人”字段中的地址、或“通过”头中的地址,或仅通过记录连接地址的主机,可以知道代理。如果您仍然担心,请使用与程序执行之外的任何内容都不相关的不透明标识符。