在重定向和代理上转到http.Request标头

时间:2014-11-21 16:05:00

标签: http proxy go http-headers

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

设置我的代理服务器

谢谢,

1 个答案:

答案 0 :(得分:0)

我简要地看了一下代码,看起来goproxy没有以任何特殊的方式处理3XX响应 - 它们只是简单地路由回你的客户端,所以它可以做出相应的反应。在您的情况下,您将发出另一个请求,并设置所有标头。

如果您不关心并且您只是想知道是否只是存在代理需要在客户端进行任何黑客攻击,那么不,http.Client在代理进入时不会删除任何标头使用,它甚至不知道有代理人参与。

您可以通过设置一个简单的服务器(例如Go)来轻松测试这些假设,该服务器返回重定向响应(自身或某些nc侦听器)并打印所有标头。通过代理将客户端路由到服务器时,可以确保服务器端的所有内容都很好。