如何解决从 sourceforge 下载等待和重定向
func Download(url,dir string) error {
resp,err := http.Get(url)
if err != nil {
return err
}
defer resp.Body.Close()
filename := filepath.Base(url)
filepath := path.Join(dir,filename)
out,err := os.Create(filepath)
if err != nil {
return err
}
defer out.Close()
_,err = io.copy(out,resp.Body)
return err
}
但是当我尝试从 Sourceforge
下载时我没有得到该文件,因为它有一个等待(倒计时)和一个重定向。
url := https://prdownloads.sourceforge.net/expat/expat-2.2.10.tar.xz"
Download(url,".")
有没有办法以编程方式从 Sourceforge 下载?
解决方法
这似乎做到了:
package main
import (
"net/http"
"os"
"path"
)
const (
s = "http://downloads.sourceforge.net/project/expat/expat/2.2.10/expat-2.2.10.tar.xz"
)
func main() {
r,e := http.Get(s)
if e != nil {
panic(e)
}
defer r.Body.Close()
f,e := os.Create(path.Base(s))
if e != nil {
panic(e)
}
defer f.Close()
f.ReadFrom(r.Body)
}
但是,我发现 SourceForge 不太适合下载,这里有一个镜像:
https://github.com/libexpat/libexpat/releases
,清除每个重定向的所有标头有效。将函数的第一行替换为:
client := &http.Client{}
client.CheckRedirect = func(req *http.Request,via []*http.Request) error {
for k,_ := range req.Header {
delete(req.Header,k)
}
return nil
}
req,err := http.NewRequest("GET",url,nil)
resp,err := client.Do(req)
测试:
https://sourceforge.net/projects/procps-ng/files/Production/procps-ng-3.3.17.tar.xz
https://prdownloads.sourceforge.net/expat/expat-2.4.1.tar.xz
我遇到了同样的问题。 #go-nuts 的人帮我解决了这个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。