当前位置: 首页 > 科技观察

使用curl从命令行访问Internet

时间:2023-03-13 08:59:07 科技观察

下载我们放在一起的curl备忘单。curl是一种无需使用图形界面即可从Internet获取所需信息的快速有效方法。curl通常被认为是一种非交互式网络浏览器,这意味着它从互联网上获取信息并将其显示在您的终端中或将其保存到文件中。从表面上看,这就是Firefox或Chromium等Web浏览器所做的,除了它们默认呈现信息,而curl下载并显示原始信息。事实上,curl命令可以做的更多,并且可以使用各种协议与服务器传输数据,包括HTTP、FTP、SFTP、IMAP、POP3、LDAP、SMB、SMTP等。它是对普通最终用户有用的工具,对系统管理员来说很方便,也是对微服务和云开发人员的质量保证工具。curl设计为无需用户交互即可工作,因此与Firefox不同,您必须从头到尾考虑与在线数据的交互。例如,如果要在Firefox中查看网页,则需要启动一个Firefox窗口。打开Firefox,在地址栏或搜索引擎中输入您要访问的网站。然后,导航到网站并单击要查看的页面。curl也是如此,只是你一次完成所有操作:使用它需要访问的互联网地址启动curl,并告诉它你是想将数据保存在终端中还是文件中。当您必须与需要身份验证的网站或API进行交互时,它会变得有点复杂,但是一旦您学习了curl命令语法,它就会自然而然地出现。为了帮助您掌握它,我们在一份方便的备忘录中收集了相关的语法信息。使用curl下载文件您可以通过提供指向特定URL的链接来使用curl命令下载文件。如果您提供的URL默认为index.html,则将下载此页面并将下载的文件显示在终端屏幕上。您可以将数据通过管道传递给less、tail或任何其他命令:$curl"http://example.com"|tail-n4

ExampleDomain

此域用于文档中的说明性示例。您可以在未经事先协调或征得许可的情况下在文学作品中使用该域。

更多信息。..

因为某些URL包含通常由shell解释的特殊字符,所以将URL括在引号中是最安全的。某些文件不能很好地转换为在终端中显示。您可以使用--remote-name选项使文件根据服务器上的名称保存:$curl--remote-name"https://example.com/linux-distro.iso"$lslinux-distro.iso或者,您可以使用--output选项来命名您要下载的内容:curl"http://example.com/foo.html"--outputbar.html使用curl列出远程的内容目录,因为curl不是交互式的,所以很难浏览页面上的可下载元素。如果您要连接的远程服务器允许,您可以使用curl列出目录的内容:$curl--list-only"https://example.com/foo/"如果您继续中断下载下载一个非常大的文件,您可能会发现有时需要中断下载。curl足够聪明,可以找出下载中断的位置并恢复下载。这意味着下次您在下载Linux发行版的4GBISO时遇到问题,您将不必重新开始。--continue-at的语法有点不寻常:如果你知道下载中断的字节数,你可以将它提供给curl;否则,您可以使用单个破折号(-)指示curl自动检测:$curl--remote-name--continue-at--"https://example.com/linux-distro.iso"下载文件sequence如果您需要下载多个文件而不是一个大文件,那么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"从站点下载所有PNG文件您还可以使用curl和grep进行一些基本的网络抓取,以找到您想要下载的内容。例如,假设您需要下载与您正在归档的网页相关的所有图像。首先,下载引用图像的页面。将页面内部通过管道传递给grep以搜索所需的图像类型(本例中为PNG)。最后,创建一个while循环来构造下载URL并将文件保存到您的计算机:$curlhttps://example.com|\grep--only-matching'src="[^"]*.[png]"'|\cut-d\"-f2|\whilereadi;做\curlhttps://example.com/"${i}"-o"${i##*/}";\donethis这只是一个例子,但它显示了curl在与Unix管道和一些基本但巧妙的解析结合时是多么灵活。捕获用于数据交换的HTML标头的协议将大量元数据嵌入到计算机发送以进行通信的数据包中。HTTP标头是数据初始部分的组成部分。当无法连接到网站时,查看这些标头(尤其是响应代码)可能会有所帮助:curl--head"https://example.com"HTTP/2200accept-ranges:bytesage:485487cache-control:最大年龄=604800内容类型:文本/html;charset=UTF-8date:星期日,2020年4月26日09:02:09GMTetag:“3147526947”到期:星期日,2020年5月3日09:02:09GMTlast-modified:星期四,2019年10月17日07:18:26GMT服务器:ECS(sjc/4E76)x-cache:HITcontent-length:1256200的快速失败响应通常是一个HTTP成功指示符,这是您在连接到服务器时通常期望的结果。著名的404响应表示找不到页面,而500表示服务器在处理请求时遇到错误。要查看协商期间出了什么问题,请添加--show-error选项:$curl--head--show-error"http://opensource.ga"除非您有权访问要连接的服务器,否则这些问题将很难解决,但curl通常会尽力连接到您指定的地址。有时在网络上测试时,无休止的重试似乎是在浪费时间,因此您可以使用--fail-early选项强制curl在失败时快速退出:curl--fail-early"http://opensource.ga"由3xxresponses300指定的重定向查询这一系列的响应更加灵活。具体来说,301响应意味着URL已永久移动到另一个位置。这是网站管理员重新定位内容并留下“踪迹”以便访问旧地址的人仍然可以找到它的常用方法。默认情况下,curl不会执行301重定向,但您可以使用--localtion选项使其继续到301响应指向的目标:$curl"https://iana.org"|greptitle301MovedPermanently$curl--location"https://iana.org"InternetAssignedNumbersAuthority展开短网址如果想看之前的短网址访问它们时,--location选项非常有用。短URL对于具有字符限制的社交网络(当然,如果您使用现代和开源社交网络,这可能不是问题)或对于用户无法复制和粘贴长地址的印刷媒体很有用。但是,它们也可能存在风险,因为它们的目标地址本质上是隐藏的。通过组合--head选项仅查看HTTP标头和--location选项查看URL的最终地址,您可以查看短URL而无需加载其完整资源:$curl--head--location"“下载我们的curl备忘单一旦您开始考虑使用单个命令探索网络,curl是一种从Internet获取所需信息的快速有效方式,而无需打扰图形界面。为了帮助您适应工作流程,我们创建了一个curl备忘单,其中涵盖了常见的curl用法和语法,包括使用它来查询API的概述。