为什么在浏览器下载时 curl 不会下载这个链接?

mat*_*bob 40 curl

我正在运行 Mac OS 10.11.6 El Capitan。我想以编程方式下载一个链接:

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg
Run Code Online (Sandbox Code Playgroud)

如果我将此 URL 粘贴到任何浏览器(例如 Safari)中,则下载工作正常。

但是,如果我尝试从命令行使用 下载相同的 URL curl,它不起作用 - 结果是一个空文件:

$ ls -lA
$ curl -O https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
$ ls -lA
total 0
-rw-r--r--  1 myname  staff  0 Nov  7 14:07 mysql-5.7.16-osx10.11-x86_64.dmg
$ 
Run Code Online (Sandbox Code Playgroud)

当然我可以通过浏览器获取文件,但是我想了解为什么curl上面的命令不起作用。

为什么不能curl正确下载这个文件,当它明显存在于网站上并且可以通过图形网络浏览器正确访问和下载时?

tec*_*raf 69

网络服务器端重定向到以下 URL:http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg. 因为它是 CDN,确切的行为(无论您是否被重定向)可能取决于您的位置。

curl默认情况下不遵循重定向。要告诉它这样做,请添加-L参数:

curl -L -O https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg
Run Code Online (Sandbox Code Playgroud)

  • HTTPS 到 HTTP 的重定向?这太糟糕了,我并不感到惊讶 Curl 让它独自一人...... (7认同)

小智 11

如果浏览器能够下载文件,您可以检查浏览器在做什么。在谷歌浏览器上,您可以使用以下内容查看发生了什么。

1) [查看>开发者>开发者工具>网络标签>标题标签]

2) 点击下载链接。

3) 文件链接将出现在开发人员工具选项卡上。

4) 右键单击​​该文件并选择复制 > 复制为 cURL。

现在你有一个可以工作的 curl 链接。它可能会有多余的参数,您可以修剪掉。

更多详情:https : //lornajane.net/posts/2013/chrome-feature-copy-as-curl

  • 是的!这正是我所需要的。也许这是显而易见的,但我采用了 cURL 命令并在其末尾添加了“--output download.csv”,否则我认为它会将文件流式传输到标准输出。 (2认同)