我正在运行 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)
小智 11
如果浏览器能够下载文件,您可以检查浏览器在做什么。在谷歌浏览器上,您可以使用以下内容查看发生了什么。
1) [查看>开发者>开发者工具>网络标签>标题标签]
2) 点击下载链接。
3) 文件链接将出现在开发人员工具选项卡上。
4) 右键单击该文件并选择复制 > 复制为 cURL。
现在你有一个可以工作的 curl 链接。它可能会有多余的参数,您可以修剪掉。
更多详情:https : //lornajane.net/posts/2013/chrome-feature-copy-as-curl