维基百科网址在10次重定向错误GoLang后停止

时间:2015-08-31 01:15:47

标签: redirect go https

执行HTTP Get请求时,收到以下错误:

2015/08/30 16:42:09 Get https://en.wikipedia.org/wiki/List_of_S%26P_500_companies: 
stopped after 10 redirects

在以下代码中:

package main

import (
    "net/http"
    "log"
)

func main() {
    response, err := http.Get("https://en.wikipedia.org/wiki/List_of_S%26P_500_companies")
    if err != nil {
        log.Fatal(err)
    }
}

我知道根据文档,

// Get issues a GET to the specified URL. If the response is one of
// the following redirect codes, Get follows the redirect, up to a
// maximum of 10 redirects:
//
//    301 (Moved Permanently)
//    302 (Found)
//    303 (See Other)
//    307 (Temporary Redirect)
//
// An error is returned if there were too many redirects or if there
// was an HTTP protocol error. A non-2xx response doesn't cause an
// error.

我希望有人知道在这种情况下解决方案是什么。这个简单的url导致超过十个重定向似乎很奇怪。让我觉得幕后可能会有更多的事情发生。

谢谢。

2 个答案:

答案 0 :(得分:0)

正如其他人所指出的那样,您应该首先考虑为什么遇到如此多的HTTP重定向。 Go的默认策略是停止10次重定向是合理的。超过10次重定向可能意味着您处于重定向循环中。这可能是在您的代码之外引起的。它可能是由您的网络配置,您和网站之间的代理服务器等引起的。

也就是说,如果您确实需要更改默认策略,则无需像某人建议那样编辑net / http源。

要更改重定向的默认处理,您需要创建一个客户端并设置CheckRedirect。

供您参考: http://golang.org/pkg/net/http/#Client

// If CheckRedirect is nil, the Client uses its default policy,
// which is to stop after 10 consecutive requests.
CheckRedirect func(req *Request, via []*Request) error

答案 1 :(得分:0)

我的维基百科网址包含%26时遇到此问题,因为它们会重定向到带有&的网址版本,然后Go转码为%26,维基百科重定向到&和......

奇怪的是,从我的Arch框中删除gcc-go(v1.4)并将其替换为go(v1.5)已解决了这个问题。

我猜这可以归结为v1.4和v1.5之间net/http的变化。