在Linux/Unix命令行上下载带有curl的文件

时间:2020-01-09 14:16:19  来源:igfitidea点击:

bash shell脚本,如何使用curl直接从命令行界面下载文件?
如何在Linux或类似Unix的系统上使用cURL下载文件?

说明:cURL既是命令行实用程序又是库。
人们可以使用它通过许多不同的协议(例如HTTP,HTTPS,FTP,SFTP等)来下载或传输数据/文件。

curl命令行实用程序使您可以从bash shell中获取给定的URL或文件。
本教程说明如何在Linux,macOS,* BSD和类似Unix的操作系统上使用curl命令下载文件。

如何使用curl命令下载文件

基本语法:

  • 使用curl运行来抓取文件:curl https://your-domain/file.pdf
  • 使用ftp或sftp协议获取文件:curl ftp://您的域名/file.tar.gz
  • 您可以在下载带有curl的文件时设置输出文件名,执行:curl -o file.pdf https://您的域名/long-file-name.pdf
  • 在下载带有curl的文件时,遵循301重定向的文件,运行:curl -L -o file.tgz http://www.theitroad.local/long.file.name.tgz

让我们看看有关在Linux或类似Unix的系统上下载和上传文件的curl的示例和用法。
命令语法为:

curl url --output filename
curl https://url -o output.file.name

让我们尝试从https://www.theitroad.local/files/sticker/sticker_book.pdf下载文件并将其另存为output.pdf

curl https://www.theitroad.local/files/sticker/sticker_book.pdf -o output.pdf

或者

curl https://www.theitroad.local/files/sticker/sticker_book.pdf --output output.pdf

-o或--output选项允许您为下载的文件指定其他名称。
如果您不提供输出文件名,curl会将其显示在屏幕上。

如何在不提供输出名称的情况下下载单个文件

您可以按原样保存输出文件,即将输出写入本地文件,例如我们获得的远程文件。
例如,sticker_book.pdf是远程URL https://www.theitroad.local/files/sticker/sticker_book.pdf的文件名。
无需传递-O即可直接将其保存在sticker_book.pdf中,而无需指定-o或--output选项。

curl -O https://www.theitroad.local/files/sticker/sticker_book.pdf

一次下载带有卷曲的文件

如何处理HTTP 301重定向文件

下载文件时,远程HTTP服务器可能会发送不同的位置状态代码。
例如,HTTP URL通常使用HTTP/301状态代码重定向到HTTPS URL。
只需传递-L,然后遵循301(3xx)重定向,并在系统上获取最终文件:

curl -L -O http://www.theitroad.local/files/sticker/sticker_book.pdf

如何使用curl下载多个文件

尝试:

curl -O url1 -O url2
curl -O https://www.theitroad.local/files/adduser.txt \
     -O https://www.theitroad.local/files/test-lwp.pl.txt

也可以使用bash进行循环:

## define a bash shell variable ##
urls="https://www.theitroad.local/files/adduser.txt https://www.theitroad.local/files/test-lwp.pl.txt"
 
## let us grab it ##
for u in $urls
do
   curl -O "$u"
done

如何使用curl和bash for loop下载文件

如何使用curl下载受密码保护的文件

尝试以下任何一种语法

curl ftp://username:[email protected]:21/path/to/backup.tar.gz
curl --ftp-ssl -u UserName:PassWord ftp://ftp1.theitroad.local:21/backups/07/07/2012/mysql.blog.sql.tar.gz
curl https://username:[email protected]/file/path/data.tar.gz
curl -u Username:Password https://server1.theitroad.local/file/path/data.tar.gz

如何使用代理服务器下载文件

同样,语法如下:

curl -x proxy-server-ip:PORT -O url
curl -x 'http://Hyman:[email protected]:3128' -v -O https://dl.theitroad.local/pdfdownloads/b8bf71be9da19d3feeee27a0a6960cb3/569b7f08/cms/631.pdf

如何将curl命令与代理用户名/密码一起使用

使用curl下载文件

curl命令可以提供有用的信息,尤其是HTTP标头。
因此,可以使用此类信息来调试服务器问题。
让我们看一下curl命令的一些例子。
传递-v以查看完整的请求发送和从Web服务器接收的响应。

curl -v url
curl -o output.pdf -v https://www.theitroad.local/files/sticker/sticker_book.pdf

在不下载文件的情况下获取HTTP标头信息

另一个有用的选项是获取HTTP标头。
所有HTTP服务器都具有命令HEAD,该命令用于获取文档的标头。
例如,当您只想查看HTTP响应标头而不下载数据或实际文件时:

curl -I url
curl -I https://www.theitroad.local/files/sticker/sticker_book.pdf -o output.pdf

获取给定URL的标题信息

使用curl时如何跳过SSL跳过?

如果远程服务器具有自签名证书,则可能要跳过SSL检查。
因此,通过传递-k选项,如下所示:

curl -k url
curl -k https://www.theitroad.local/

限速下载/上传速度

您可以指定希望卷发用于下载和上传文件的最大传输速率。
如果您的Internet带宽有限,并且您希望传输不占用全部带宽,则此功能非常方便。
给定的速度以字节/秒为单位,除非追加了后缀。
追加k或K会将数字计算为千字节,m或M使其成为兆字节,而g或G使其成为千兆字节。
例如:200K,3m和1G:

curl --limit-rate {speed} url
curl --limit-rate 200 https://www.theitroad.local/
curl --limit-rate 3m https://www.theitroad.local/

设置用户代理

某些Web应用程序防火墙将在下载文件时阻止默认的curl用户代理。
为了避免此类问题,请通过-A选项来设置用户代理。

curl -A 'user agent name' url
curl -A 'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0' https://google.com/

使用CURL上传文件

上传文件的语法如下:

curl -F "var=@path/to/local/file.pdf" https://url/upload.php

例如,您可以将~/Pictures/test.png中的文件上传到服务器https://127.0.0.1/app/upload.php,该服务器处理名为img_file的表单参数的文件输入,运行:

curl -F "img_file=@~/Pictures/test.png" https://127.0.0.1/app/upload.php

一个人可以上传多个文件,如下所示:

curl -F "img_file1=@~/Pictures/test-1.png" \
-F "img_file2=@~/Pictures/test-2.png" \
https://127.0.0.1/app/upload-multi.php