执行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导致超过十个重定向似乎很奇怪。让我觉得幕后可能会有更多的事情发生。
谢谢。
答案 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
的变化。