标签 cURL 下的文章

VBScript 将从 Windows 中删除

微软表示,VBScript 已被弃用,被列在其 Windows 客户端废弃功能列表中。在未来的 Windows 版本中,VBScript 将作为一项可选功能,之后会从 Windows 中删除。VBScript 首次发布于 1996 年,但其早在 2010 年就停止了开发。它是一种脚本语言,曾一度被 Windows 系统管理员广泛用于自动执行任务,直到被 2006 年问世的 PowerShell 所取代。VBScript 也曾用于 IE 和 IIS 中,但由于其它浏览器并不支持它,因此在微软独有的环境之外逐渐被 JavaScript 所取代。

消息来源:The Register
老王点评:这就是微软封闭时代的遗留物之一,这些遗留物将逐渐消失在故纸堆中。

严重安全漏洞影响三年来的所有 curl 版本

前几天,curl 官方就发出预警,其正在修复一个高危安全漏洞,并将在今天发布修复版本 8.4.0。根据刚刚发布的最新版本和安全公告,这个漏洞影响从 2020 年 3 月发布的 7.69.0 到 8.3.0 的所有版本。该漏洞导致 curl 在 SOCKS5 代理握手过程中堆缓冲区溢出。鉴于 curl 和 libcurl 被广泛用在各种项目中,其带来的影响非常广泛。建议的做法是升级到最新版本,或者不要使用 SOCKS5 代理。curl 作者还就如何产生该漏洞做了深入探讨和 反省

消息来源:CURL
老王点评:虽然这种事情在所难免,但是又一次让人思考现有的开源软件供应链模式是否先天上难以免除这种风险?或许需要一些不一样的思考。

谷歌等披露 HTTP/2 “快速重置” DDoS 攻击

最近几个月,Cloudflare、AWS、谷歌以及其他大型云服务商都受到了一种新型 DDoS 攻击,其中一些 DDoS 攻击达到了每秒 2 亿至 4 亿次请求。谷歌云报告称,由于这种现在被称为 HTTP/2 “快速重置”攻击的攻击,其每秒请求数达到了破纪录的 3.98 亿。这种攻击的模式是,攻击端发起请求使服务器端开始工作,然后快速重置请求。当请求被取消,但 HTTP/2 连接仍保持开放,而服务器仍需为取消的请求做大量工作。并且,立即重置流的能力使每个连接都能无限量地发送请求。通过明确取消请求,攻击者永远不会超过并发开放流的数量限制。

消息来源:Phoronix
老王点评:要说谁对各种协议最热衷,那就是专门盯着这些协议,以期发现各种漏洞的攻击者了。

cURL 发布 8.0,庆祝其 25 岁生日

它是一个用于用 URL 传输数据的命令行工具和库,任何认真编写通过网络进行交互的代码的开发人员都可能使用过 curl。如今,它估计已经被安装了超过 100 亿次。它的第一个版本是 4.0,发布于 1998 年,它仅有 2200 行代码,由 httpget 和 urlget 项目改编而成。当时只能支持三种协议,24 个命令行选项,而现在可以支持 28 种协议,249 个选项。

消息来源:The Register
老王点评:就这样一个原本的个人项目,现在居然发展成了互联网基石项目。

GitHub Copilot 将迁移到 GPT 上

GitHub 已经对其 Copilot 编程模型进行了培训,以执行新的任务,并有了一个新的名字 GitHub Copilot X。今后,Copilot 将依靠一套不断发展的大型语言模型,包括 OpenAI 的 GPT-3.5-turbo 和 GPT-4,而不是 OpenAI 的 Codex 的定制版本。OpenAI 将在 3 月 23 日关闭 Codex 的公共 API。根据 GitHub 的数据,截至上个月,Copilot 参与了微软的云代码库中 46% 的代码创建,并帮助开发者的编程速度提高了 55%。

消息来源:The Register
老王点评:通过 VSCode、GitHub、Copilot,微软似乎已经把开发者所需要的各个方面都掌握了。

Mozilla 将建立 Mozilla.ai

Mozilla 今天宣布,他们将投资 3000 万美元建立一个新的创业公司 Mozilla.ai,专注于 “建立一个值得信赖的、独立的、开源的 AI 生态系统”。Mozilla 称,“人工智能的核心是代理权、问责制、透明度和开放性。Mozilla.ai 将成为大科技公司和学术界之外的一个空间,供志同道合的创始人、开发人员、科学家、产品经理和建设者聚集。”

消息来源:Phoronix
老王点评:虽然这又是一个 Mozilla “不务正业”的项目,但是希望可以为 AI 打造一个可信、独立的道路。

微软的星球级的 AI 基础设施包括数十万个 GPU

微软透露,它运营着一个星球级的分布式调度服务来处理 AI 工作负载,它被称为“奇点”。它的目的是提高深度学习工作负载的高利用率来控制成本。其工作负载感知调度器可以透明地抢占和弹性地扩展深度学习工作负载,在 AI 加速器(如 GPU、FPGA)全球机群上提高利用率,而不影响其正确性或性能。在“奇点”机群中有数十万个 GPU,以及 FPGA 和其他 AI 加速器。该软件自动将工作与加速器资源解耦,这意味着当工作负载扩大或缩小时,只需改变映射的设备数量,而这对用户来说是完全透明的。

老王点评:首先我吃惊于其规模,其次,我觉得超算之外的集群技术非常有用。

Fedora 考虑默认为 cURL提供精简版本

cURL 是一个广泛使用的网络客户端,除了 HTTP(S) 之外,它还可以访问诸多网络协议,此外大量的应用使用 libcurl 来访问网络资源。在近日提交的一份针对 Fedora 37 的 修改建议 中,推荐默认使用精简版的 cURL 包,只提供了 HTTP/HTTPS/FTP 支持,而那些需要其他网络协议支持的用户可以安装完整包。精简包禁用了大量过时或很少使用的协议,如 GOPHER、IMAP、LDAP、MQTT、NTLM、POP3、RTSP、SMB、SMTP、SFTP、TELNET、TFTP 等等,这些协议有时候会带来安全风险。

老王点评:确实,很多历史遗留或很少使用的网络协议,如果没有明确需要的话,留着只是增加攻击面。其它传统的工具也应该学习这种改变的思路。

内核开发者正在讨论弃用 ReiserFS 文件系统

在 21 年前,ReiserFS 作为 Linux 内核的首个日志文件系统被引入。在推出的早期,这一开源文件系统提供了相当多的创新功能,甚至一度被 SuSE Linux 默认使用。然而自从 ReiserFS 主要开发者 Hans Reiser 在 15 年前因杀妻而入狱后,ReiserFS / Reiser4 已停滞相当长一段时间。至少自 2019 年以来,似乎就没有任何用户上报的 ReiserFS bug 被修复。在被 EXT4、XFS、Btrfs、甚至 OpenZFS 吸引走了越来越多的份额之后,内核开发者发起了“是否要将 ReiserFS 踢出 Linux 内核支持”的讨论。

老王点评:正所谓人亡政息,但是还是很可惜。

下载我们整理的 curl 备忘录。要在不使用图形界面的情况下从互联网上获取所需的信息,curl 是一种快速有效的方法。

curl 通常被视作一款非交互式 Web 浏览器,这意味着它能够从互联网上获取信息,并在你的终端中显示,或将其保存到文件中。从表面看,这是 Web 浏览器,类似 Firefox 或 Chromium 所做的工作,只是它们默认情况下会渲染信息,而 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,那么将下载此页面,并将下载的文件显示在终端屏幕上。你可以将数据通过管道传递到 lesstail 或任何其它命令:

$ 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 包含特殊字符,shell 通常会将其解释,因此最安全的做法用引号将 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 来列出目录的内容:

$ curl --list-only "https://example.com/foo/"

继续中断下载

如果你正在下载一个非常大的文件,你可能会发现有时候必须中断下载。curl 非常智能,可以确定下载从何处中断并继续下载。这意味着,下一次当你下载一个 4GB 的 Linux 发行版的 ISO 出现问题时,就不必重新开始了。--continue-at 的语法有点不寻常:如果你知道下载中断时的字节数,你可以提供给 curl;否则,你可以使用单独的一个破折号(-)指示 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_000images_009,而 #2 指目录 file_1.webpfile_4.webp

$ curl "https://example.com/images_00[0-9]/file_[1-4].webp" --output "file_#1-#2.webp"

从站点下载所有 PNG 文件

你也可以仅使用 curlgrep 进行一些基本的 Web 抓取操作,以找到想要下载的内容。例如,假设你需要下载与正在归档网页关联的所有图像,首先,下载引用了图像的页面。将页面内通过管道传输到 grep,搜索所需的图片类型(在此示例中为 PNG)。最后,创建一个 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

这只是一个示例,但它展示了 curl 与 Unix 管道和一些基本而巧妙的解析结合使用时是多么的灵活。

获取 HTML 头

用于数据交换的协议在计算机发送通信的数据包中嵌入了大量元数据。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 选项来强制 curl 在失败时迅速退出:

curl --fail-early "http://opensource.ga"

由 3xx 响应指定的重定向查询

300 这个系列的响应更加灵活。具体来说,301 响应意味着一个 URL 已被永久移动到其它位置。对于网站管理员来说,重新定位内容并留下“痕迹”是一种常见的方式,这样访问旧地址的人们仍然可以找到它。默认情况下,curl 不会进行 301 重定向,但你可以使用 --localtion 选项使其继续进入 301 响应指向的目标:

$ curl "https://iana.org" | grep title
<title>301 Moved Permanently</title>
$ curl --location "https://iana.org"
<title>Internet Assigned Numbers Authority</title>

展开短网址

如果你想要在访问短网址之前先查看它们,那么 --location 选项非常有用。短网址对于有字符限制的社交网络(当然,如果你使用现代和开源的社交网络的话,这可能不是问题),或者对于用户不能复制粘贴长地址的印刷媒体来说是有用处的。但是,它们也可能存在风险,因为其目的地址本质上是隐藏的。通过结合使用 --head 选项仅查看 HTTP 头,--location 选项可以查看一个 URL 的最终地址,你可以查看一个短网址而无需加载其完整的资源:

$ curl --head --location "<https://bit.ly/2yDyS4T>"

下载我们的 curl 备忘录

一旦你开始考虑了将探索 web 由一条命令来完成,那么 curl 就成为一种快速有效的方式,可以从互联网上获取所需的信息,而无需麻烦图形界面。为了帮助你适应到工作流中,我们创建了一个 curl 备忘录,它包含常见的 curl 用法和语法,包括使用它查询 API 的概述。


via: https://opensource.com/article/20/5/curl-cheat-sheet

作者:Seth Kenlon 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

最近,我对人们如何学习新事物感兴趣。我正在读 Kathy Sierra 的好书《Badass: Making Users Awesome》,它探讨了有关“刻意练习”的想法。这个想法是,你找到一个可以用三节 45 分钟课程内能够学会的小技能,并专注于学习这项小技能。因此,作为一项练习,我尝试考虑一项能够在三节 45 分钟课程内学会的计算机技能。

我认为使用 curl 构造 HTTP 请求也许就是这样的一项技能,所以这里有一些 curl 练习作为实验!

什么是 curl ?

curl 是用于构造 HTTP 请求的命令行工具。我喜欢使用 curl,因为它能够很轻松地测试服务器或 API 的行为是否符合预期,但是刚开始接触它的时候会让你感到一些困惑!

下面是一幅解释 curl 常用命令行参数的漫画 (在我的 Bite Size Networking 杂志的第 6 页)。

熟能生巧

对于任何命令行工具,我认为熟练使用是很有帮助的,能够做到只输入必要的命令真是太好了。例如,最近我在测试 Gumroad API,我只需要输入:

curl https://api.gumroad.com/v2/sales \
                         -d "access_token=<SECRET>" \
                         -X GET  -d "before=2016-09-03"

就能从命令行中得到想要的结果。

21 个 curl 练习

这些练习是用来理解如何使用 curl 构造不同种类的 HTTP 请求的,它们是故意有点重复的,基本上包含了我需要 curl 做的任何事情。

为了简单起见,我们将对 https://httpbin.org 发起一系列 HTTP 请求,httpbin 接受 HTTP 请求,然后在响应中回显你所发起的 HTTP 请求。

  1. 请求 https://httpbin.org
  2. 请求 https://httpbin.org/anything,它将会解析你发起的请求,并且在响应中回显。curl 默认发起的是 GET 请求
  3. https://httpbin.org/anything 发起 GET 请求
  4. https://httpbin.org/anything 发起 GET 请求,但是这次需要添加一些查询参数(设置 value=panda
  5. 请求 Google 的 robots.txt 文件 (www.google.com/robots.txt)
  6. https://httpbin.org/anything 发起 GET 请求,并且设置请求头为 User-Agent: elephant
  7. https://httpbin.org/anything 发起 DELETE 请求
  8. 请求 https://httpbin.org/anything 并获取响应头信息
  9. https://httpbin.com/anything 发起请求体为 JSON {"value": "panda"} 的 POST 请求
  10. 发起与上一次相同的 POST 请求,但是这次要把请求头中的 Content-Type 字段设置成 application/json(因为 POST 请求需要一个与请求体相匹配的 Content-Type 请求头字段)。查看响应体中的 json 字段,对比上一次得到的响应体
  11. https://httpbin.org/anything 发起 GET 请求,并且在请求头中设置 Accept-Encoding: gzip(将会发生什么?为什么会这样?)
  12. 将一些 JSON 放在文件中,然后向 https://httpbin.org/anything 发起请求体为该文件的 POST 请求
  13. 设置请求头为 Accept: image/png 并且向 https://httpbin.org/image 发起请求,将输出保存为 PNG 文件,然后使用图片浏览器打开。尝试使用不同的 Accept: 字段去请求此 URL
  14. https://httpbin.org/anything 发起 PUT 请求
  15. 请求 https://httpbin.org/image/jpeg 并保存为文件,然后使用你的图片编辑器打开这个文件
  16. 请求 https://www.twitter.com,你将会得到空的响应。让 curl 显示出响应头信息,并尝试找出响应内容为空的原因
  17. https://httpbin.org/anything 发起任意的请求,同时设置一些无意义的请求头(例如:panda: elephant
  18. 请求 https://httpbin.org/status/404和https://httpbin.org/status/200,然后再次请求它们并且让 curl 显示响应头信息
  19. 请求 https://httpbin.org/anything 并且设置用户名和密码(使用 -u username:password
  20. 设置 Accept-Language: es-ES 的请求头用以下载 Twitter 的西班牙语主页 (https://twitter.com)
  21. 使用 curl 向 Stripe API 发起请求(请查看 https://stripe.com/docs/development了解如何使用,他们会给你一个测试用的APIkey)。尝试向https://httpbin.org/anything 发起相同的请求

via: https://jvns.ca/blog/2019/08/27/curl-exercises/

作者:Julia Evans 选题:lujun9972 译者:hanwckf 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

大多数时间我们会使用 curl 命令或是 wget 命令下载文件或者做其他事。

我们以前曾写过 最佳命令行下载管理器 的文章。你可以点击相应的 URL 连接来浏览这些文章。

今天我们将讨论同样的话题。这个实用程序名为 HTTPie。

它是现代命令行 http 客户端,也是 curlwget 命令的最佳替代品。

什么是 HTTPie?

HTTPie (发音是 aitch-tee-tee-pie) 是一个 HTTP 命令行客户端。

HTTPie 工具是现代的 HTTP 命令行客户端,它能通过命令行界面与 Web 服务进行交互。

它提供一个简单的 http 命令,允许使用简单而自然的语法发送任意的 HTTP 请求,并会显示彩色的输出。

HTTPie 能用于测试、调试及与 HTTP 服务器交互。

主要特点

  • 具表达力的和直观语法
  • 格式化的及彩色化的终端输出
  • 内置 JSON 支持
  • 表单和文件上传
  • HTTPS、代理和认证
  • 任意请求数据
  • 自定义头部
  • 持久化会话
  • 类似 wget 的下载
  • 支持 Python 2.7 和 3.x

在 Linux 下如何安装 HTTPie

大部分 Linux 发行版都提供了系统包管理器,可以用它来安装。

Fedora 系统,使用 DNF 命令 来安装 httpie:

$ sudo dnf install httpie

Debian/Ubuntu 系统,使用 APT-GET 命令APT 命令 来安装 HTTPie。

$ sudo apt install httpie

基于 Arch Linux 的系统,使用 Pacman 命令 来安装 HTTPie。

$ sudo pacman -S httpie

RHEL/CentOS 的系统,使用 YUM 命令 来安装 HTTPie。

$ sudo yum install httpie

openSUSE Leap 系统,使用 Zypper 命令 来安装 HTTPie。

$ sudo zypper install httpie

用法

如何使用 HTTPie 请求 URL?

HTTPie 的基本用法是将网站的 URL 作为参数。

# http 2daygeek.com
HTTP/1.1 301 Moved Permanently
CF-RAY: 4c4a618d0c02ce6d-LHR
Cache-Control: max-age=3600
Connection: keep-alive
Date: Tue, 09 Apr 2019 06:21:28 GMT
Expires: Tue, 09 Apr 2019 07:21:28 GMT
Location: https://2daygeek.com/
Server: cloudflare
Transfer-Encoding: chunked
Vary: Accept-Encoding

如何使用 HTTPie 下载文件

你可以使用带 --download 参数的 HTTPie 命令下载文件。类似于 wget 命令。

# http --download https://www.2daygeek.com/wp-content/uploads/2019/04/Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png
HTTP/1.1 200 OK
Accept-Ranges: bytes
CF-Cache-Status: HIT
CF-RAY: 4c4a65d5ca360a66-LHR
Cache-Control: public, max-age=7200
Connection: keep-alive
Content-Length: 32066
Content-Type: image/png
Date: Tue, 09 Apr 2019 06:24:23 GMT
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Expires: Tue, 09 Apr 2019 08:24:23 GMT
Last-Modified: Mon, 08 Apr 2019 04:54:25 GMT
Server: cloudflare
Set-Cookie: __cfduid=dd2034b2f95ae42047e082f59f2b964f71554791063; expires=Wed, 08-Apr-20 06:24:23 GMT; path=/; domain=.2daygeek.com; HttpOnly; Secure
Vary: Accept-Encoding

Downloading 31.31 kB to "Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png"
Done. 31.31 kB in 0.01187s (2.58 MB/s)

你还可以使用 -o 参数用不同的名称保存输出文件。

# http --download https://www.2daygeek.com/wp-content/uploads/2019/04/Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png -o Anbox-1.png
HTTP/1.1 200 OK
Accept-Ranges: bytes
CF-Cache-Status: HIT
CF-RAY: 4c4a68194daa0a66-LHR
Cache-Control: public, max-age=7200
Connection: keep-alive
Content-Length: 32066
Content-Type: image/png
Date: Tue, 09 Apr 2019 06:25:56 GMT
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Expires: Tue, 09 Apr 2019 08:25:56 GMT
Last-Modified: Mon, 08 Apr 2019 04:54:25 GMT
Server: cloudflare
Set-Cookie: __cfduid=d3eea753081690f9a2d36495a74407dd71554791156; expires=Wed, 08-Apr-20 06:25:56 GMT; path=/; domain=.2daygeek.com; HttpOnly; Secure
Vary: Accept-Encoding

Downloading 31.31 kB to "Anbox-1.png"
Done. 31.31 kB in 0.01551s (1.97 MB/s)

如何使用 HTTPie 恢复部分下载?

你可以使用带 -c 参数的 HTTPie 继续下载。

# http --download --continue https://speed.hetzner.de/100MB.bin -o 100MB.bin
HTTP/1.1 206 Partial Content
Connection: keep-alive
Content-Length: 100442112
Content-Range: bytes 4415488-104857599/104857600
Content-Type: application/octet-stream
Date: Tue, 09 Apr 2019 06:32:52 GMT
ETag: "5253f0fd-6400000"
Last-Modified: Tue, 08 Oct 2013 11:48:13 GMT
Server: nginx
Strict-Transport-Security: max-age=15768000; includeSubDomains

Downloading 100.00 MB to "100MB.bin"
 |  24.14 %   24.14 MB    1.12 MB/s  0:01:07 ETA^C

你根据下面的输出验证是否同一个文件:

[email protected]:/var/log# ls -lhtr 100MB.bin
-rw-r--r-- 1 root root 25M Apr  9 01:33 100MB.bin

如何使用 HTTPie 上传文件?

你可以通过使用带有小于号 < 的 HTTPie 命令上传文件

$ http https://transfer.sh < Anbox-1.png

如何使用带有重定向符号 > 下载文件?

你可以使用带有重定向 > 符号的 HTTPie 命令下载文件。

# http https://www.2daygeek.com/wp-content/uploads/2019/03/How-To-Install-And-Enable-Flatpak-Support-On-Linux-1.png > Flatpak.png

# ls -ltrh Flatpak.png
-rw-r--r-- 1 root root 47K Apr  9 01:44 Flatpak.png

发送一个 HTTP GET 请求?

您可以在请求中发送 HTTP GET 方法。GET 方法会使用给定的 URI,从给定服务器检索信息。

# http GET httpie.org
HTTP/1.1 301 Moved Permanently
CF-RAY: 4c4a83a3f90dcbe6-SIN
Cache-Control: max-age=3600
Connection: keep-alive
Date: Tue, 09 Apr 2019 06:44:44 GMT
Expires: Tue, 09 Apr 2019 07:44:44 GMT
Location: https://httpie.org/
Server: cloudflare
Transfer-Encoding: chunked
Vary: Accept-Encoding

提交表单?

使用以下格式提交表单。POST 请求用于向服务器发送数据,例如客户信息、文件上传等。要使用 HTML 表单。

# http -f POST Ubuntu18.2daygeek.com hello='World'
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: Keep-Alive
Content-Encoding: gzip
Content-Length: 3138
Content-Type: text/html
Date: Tue, 09 Apr 2019 06:48:12 GMT
ETag: "2aa6-5844bf1b047fc-gzip"
Keep-Alive: timeout=5, max=100
Last-Modified: Sun, 17 Mar 2019 15:29:55 GMT
Server: Apache/2.4.29 (Ubuntu)
Vary: Accept-Encoding

运行下面的指令以查看正在发送的请求。

# http -v Ubuntu18.2daygeek.com
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: ubuntu18.2daygeek.com
User-Agent: HTTPie/0.9.8

hello=World

HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: Keep-Alive
Content-Encoding: gzip
Content-Length: 3138
Content-Type: text/html
Date: Tue, 09 Apr 2019 06:48:30 GMT
ETag: "2aa6-5844bf1b047fc-gzip"
Keep-Alive: timeout=5, max=100
Last-Modified: Sun, 17 Mar 2019 15:29:55 GMT
Server: Apache/2.4.29 (Ubuntu)
Vary: Accept-Encoding

HTTP 认证?

当前支持的身份验证认证方案是基本认证(Basic)和摘要验证(Digest)。

基本认证:

$ http -a username:password example.org

摘要验证:

$ http -A digest -a username:password example.org

提示输入密码:

$ http -a username example.org

via: https://www.2daygeek.com/httpie-curl-wget-alternative-http-client-linux/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:zgj1024 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出