Golang http。获取太多重定向
我正试图从网上下载一个文件。它应该是一个简单的过程。这是我以前做过的。但是,这个135 kB zip文件的特殊链接给了我一条错误消息:Gethttp://www1.caixa.gov.br/loterias/_arquivos/loterias/D_megase.zip: 10分钟后停止重定向。如果我将链接复制到浏览器中,文件下载时不会出现任何问题,但使用下面的代码时,会弹出错误 包干管 进口 木卫一 net/http 操作系统 func main{ 链接:=http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_megase.zip resp,err:=http.Getlink 如果错误!=零{ 圆锥花序 } 延迟响应体关闭 //创建文件 out,err:=os.Createms.zip 如果错误!=零{ 圆锥花序 } 推迟,结束 //将正文写入文件 _,err=io.Copyout,resp.Body 如果错误!=零{ 圆锥花序 } } 有没有关于为什么会发生这种情况以及如何避免这种情况的想法Golang http。获取太多重定向,http,go,download,Http,Go,Download,我正试图从网上下载一个文件。它应该是一个简单的过程。这是我以前做过的。但是,这个135 kB zip文件的特殊链接给了我一条错误消息:Gethttp://www1.caixa.gov.br/loterias/_arquivos/loterias/D_megase.zip: 10分钟后停止重定向。如果我将链接复制到浏览器中,文件下载时不会出现任何问题,但使用下面的代码时,会弹出错误 包干管 进口 木卫一 net/http 操作系统 func main{ 链接:=http://www1.caixa.
感谢您的关注。您的代码非常好,但您经常会发现此问题与您试图下载文件的源代码本身有关,而不是直接下载 其他工具/语言也会出现同样的问题,因为您试图访问的主机由于“User Agent”头属性无效而不断重定向您。当您希望只允许从“浏览器”下载文件,而不是从爬网、自动脚本等下载文件时,通常会出现这种情况 使用Go,您可以在发送请求之前使用req.header.SetUser-Agent添加header属性。您将创建一个请求集头的实例,并使用http.Client{}和Client.Doreq执行它 例如: 您可以在中阅读更多内容,其中指出: 用于控制HTTP客户端头、重定向策略和其他 设置,创建客户端 这里还有一些文件和文档 你可以在例如,以及许多其他优秀的文档和资源中找到更多关于这个ingeneral的信息
顺便说一句,您试图下载的zip档案似乎无效:- 您的代码很好,但您经常会发现,这个问题与您试图从中下载文件的源代码本身有关,而不是直接下载 其他工具/语言也会出现同样的问题,因为您试图访问的主机由于“User Agent”头属性无效而不断重定向您。当您希望只允许从“浏览器”下载文件,而不是从爬网、自动脚本等下载文件时,通常会出现这种情况 使用Go,您可以在发送请求之前使用req.header.SetUser-Agent添加header属性。您将创建一个请求集头的实例,并使用http.Client{}和Client.Doreq执行它 例如: 您可以在中阅读更多内容,其中指出: 用于控制HTTP客户端头、重定向策略和其他 设置,创建客户端 这里还有一些文件和文档 你可以在例如,以及许多其他优秀的文档和资源中找到更多关于这个ingeneral的信息
顺便说一句,您试图下载的zip档案似乎无效:- 在调查这个url之后,我发现它设置了cookie 设置Cookie:security=true;路径=/ 您可以手动设置cookie,也可以实现CookieJar
c := http.Client{}
req, err := http.NewRequest("GET", link, nil)
if err != nil {
panic(err)
}
req.AddCookie(&http.Cookie{Name: "security", Value: "true", Path: "/"})
resp, err := c.Do(req)
if err != nil {
panic(err)
}
在调查了这个url之后,我发现它设置了cookie 设置Cookie:security=true;路径=/ 您可以手动设置cookie,也可以实现CookieJar
c := http.Client{}
req, err := http.NewRequest("GET", link, nil)
if err != nil {
panic(err)
}
req.AddCookie(&http.Cookie{Name: "security", Value: "true", Path: "/"})
resp, err := c.Do(req)
if err != nil {
panic(err)
}