curl命令行
Curl通常被认为是非交互式Web浏览器。 这意味着它能够从互联网上获取信息并在您的终端中显示或将其保存到文件中。 从字面上看,这是Web浏览器(例如Firefox或Chromium)所做的工作,只是它们默认情况下呈现信息,而curl下载并显示原始信息。 实际上,curl命令可以做更多的事情,并且能够使用许多受支持的协议之一(包括HTTP,FTP,SFTP,IMAP,POP3,LDAP,SMB,SMTP等)与服务器之间进行数据传输。 对于普通终端用户来说,这是一个有用的工具,对于sysadmin,这是至关重要的便利,对于微服务和云开发人员来说,它是质量保证工具。
Curl设计为无需用户交互即可工作,因此与Firefox不同,您必须从头至尾考虑与在线数据的交互。 例如,如果要在Firefox中查看网页,则可以启动Firefox窗口。 打开Firefox后,在URL字段或搜索引擎中键入要访问的网站。 然后,您导航到该站点,然后单击要查看的页面。
curl命令的语法,就成为第二天性。 为了帮助您掌握它,我们在方便的备忘单中收集了相关的语法信息。您可以使用curl命令通过提供指向特定URL的链接来下载文件。 如果提供的URL默认为index.html ,那么将下载索引页面,并且下载的文件将显示在终端屏幕上。 您可以将输出传递给less或tail或任何其他命令:
$ curl
"http://example.com"
|
tail
-n
4
< h1
> Example Domain
h1
>
< p
> This domain is
for use
in illustrative examples
in documents. You may use this domain
in literature without prior coordination or asking
for permission.
p
>
< p
>< a
href =
"https://www.iana.org/domains/example"
> More information...
a
> p
>
div
> body
> html
>
由于某些URL包含外壳程序通常会解释的特殊字符,因此将URL括在引号中是最安全的。
某些文件无法很好地转换为显示在终端中。 您可以使用--remote-name选项使文件根据服务器上的调用进行保存:
$ curl
--remote-name
"https://example.com/linux-distro.iso"
$
ls
linux-distro.iso
另外,您可以使用--output选项来命名您想要的下载内容:
curl "http://example.com/foo.html" --output bar.html
因为curl是非交互式的,所以很难浏览页面上的可下载元素。 如果要连接的远程服务器允许它,则可以使用curl列出目录的内容:
$ curl --list-only "https://example.com/foo/"
如果要下载很大的文件,可能会发现必须中断下载。 Curl足够智能,可以确定您从何处中断并继续下载。 这意味着下次您下载4GB Linux发行版ISO时,如果出现问题,则无需重新开始。 --continue-at的语法有点不寻常:如果您知道下载中断的字节数,则可以提供它; 否则,您可以使用斜杠( - )指示curl自动检测到它:
$ curl --remote-name --continue-at - "https://example.com/linux-distro.iso"
如果您需要下载多个文件(而不只是一个大文件),那么curl可以帮助您。 假设您知道要下载的文件的位置和文件名模式,则可以使用curl的排序符号:括号中整数范围内的起点和终点。 对于输出文件名,使用#1表示第一个变量:
$ curl "https://example.com/file_[1-4].webp" --output "file_#1.webp"
如果您需要使用另一个变量来表示另一个序列,请按照每个变量在命令中出现的顺序表示每个变量。 例如,在此命令中, #1指目录images_000到images_009 ,而#2指文件file_1.webp到file_4.webp :
$ curl
"https://example.com/images_00[0-9]/file_[1-4].webp" \
--output
"file_#1-#2.webp"
您也可以只使用curl和grep进行一些基本的Web抓取,找到想要下载的内容。 例如,假设您需要下载与要归档的网页关联的所有图像。 首先,下载引用图像的页面。 搜索所需的图片类型(在此示例中为PNG),将页面通过管道传递到grep。 最后,创建一个while循环以构建下载URL并将文件保存到您的计算机:
$ curl https:
// example.com
| \
grep
--only-matching
'src="[^"]*.[png]"'
| \
cut
-d
\"
-f2
| \
while
read i;
do \
curl https:
// example.com
/
" ${i} "
-o
" ${i##*/} " ; \
done
这只是一个例子,但它展示了与Unix管道和一些聪明但基本的解析结合使用时,curl的灵活性如何。
用于数据交换的协议在计算机发送进行通信的数据包中嵌入了许多元数据。 HTTP标头是数据初始部分的组成部分。 在对站点连接进行故障排除时,查看这些标头(尤其是响应代码)可能会有所帮助:
curl
--head
"https://example.com"
HTTP
/
2
200
accept-ranges: bytes
age:
485487
cache-control: max-age=
604800
content-type: text
/ html;
charset =UTF-
8
date: Sun,
26 Apr
2020 09:02:09 GMT
etag:
"3147526947"
expires: Sun, 03 May
2020 09:02:09 GMT
last-modified: Thu,
17 Oct
2019 07:
18 :
26 GMT
server: ECS
( sjc
/ 4E76
)
x-cache: HIT
content-length:
1256
响应200通常是HTTP成功的指示,因此这是您与服务器联系时通常期望的结果。 著名的404响应表明找不到页面,而500则表明存在服务器错误。
要查看协商过程中发生了什么错误,请添加--show-error标志:
$ curl --head --show-error "http://opensource.ga"
除非您有权访问要连接的服务器,否则这些问题将很难修复,但是curl通常会尽力解决您指向的服务器的位置。 有时,当通过网络进行测试时,似乎无休止的重试只会浪费时间,因此您可以使用--fail-early选项强制卷曲在失败时Swift退出:
curl --fail-early "http://opensource.ga"
但是,这300个系列的响应更加灵活。 具体而言,301响应表示URL已被永久移动到其他位置。 这是网站管理员在离开“足迹”的同时重新定位内容的一种常见方法,因此访问旧位置的人们仍然可以找到它。 默认情况下,Curl不遵循301重定向,但是您可以使用--location选项使其继续进入301目标:
$ curl
"https://iana.org"
|
grep title
< title
>
301 Moved Permanently
title
>
$ curl
--location
"https://iana.org"
< title
> Internet Assigned Numbers Authority
title
>
如果要在访问缩短的URL之前先查看它们,则--location选项很有用。 缩短的URL可以用于有字符限制的社交网络(当然,如果您使用现代的开源社交网络 ,这可能不是问题),也可以用于用户不能仅复制和粘贴长URL的印刷媒体。 但是,它们也可能有点危险,因为其目的地本质上是隐藏的。 通过结合使用--head选项仅查看HTTP标头和--location选项以解开URL的最终目的地,您可以窥视缩短的URL而无需加载完整的资源:
$ curl
--head
--location \
"https://bit.ly/2yDyS4T"
一旦您考虑了一个命令就可以浏览网络的过程,curl就成为一种快速有效的方式,可以从Internet上获取所需的信息,而无需理会图形界面。 为了帮助您将其构建到常规工作流程中,我们创建了一个卷曲备忘单 ,其中包含常用的卷曲用法和语法,包括使用它查询API的概述。
翻译自: https://opensource.com/article/20/5/curl-cheat-sheet
curl命令行