【问题标题】:Downloading from sourceforge (wait and redirect)从 sourceforge 下载(等待和重定向)
【发布时间】:2021-07-16 02:14:21
【问题描述】:

我有如下下载功能:

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 下载?

【问题讨论】:

    标签: go download http-redirect


    【解决方案1】:

    清除每个重定向的所有标题都有效。将函数的第一行替换为:

    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 的人帮我解决了这个问题。

    另一种解决方案:https://play.golang.org/p/KuLr2c7beDA

    【讨论】:

      【解决方案2】:

      这似乎可以做到:

      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

      【讨论】:

      • 对不起史蒂夫,它不起作用,下载的文件不是tar.xz,它的内容是html,因为重定向不起作用。所以下载失败
      猜你喜欢
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 2014-01-29
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      相关资源
      最近更新 更多