在Linux/Unix命令行上下载带有curl的文件
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