Linux 上 wget 或 curl 的最佳替代品是什么
如果您经常需要在终端环境中以非交互方式访问 Web 服务器(例如,从 Web 下载文件或测试 REST 式 Web 服务 API),那么 wget
或 curl
很可能是您的首选工具。凭借广泛的命令行选项,这两个工具都可以处理各种非交互式 Web 访问用例(例如,多文件下载、带有 wget
和 curl
的自定义 HTTP 标头)。然而,即使是像这样强大的工具,其效果也取决于您是否了解如何使用它们。除非您精通其语法的具体细节,否则这些工具对您来说只不过是简单的网络下载器。
HTTPie 被誉为“人类的类似curl 的工具”,其设计目的是在可用性方面改进wget
和curl
。其主要目标是使 Web 服务器的命令行交互尽可能人性化。为此,HTTPie 具有富有表现力但非常简单直观的语法。它还以彩色格式显示响应以提高可读性,并提供出色的 JSON 支持和持久会话等好东西来简化您的工作流程。
我知道你们中的一些人会对用完全闻所未闻的软件替换 wget 或 curl 等无处不在、完美的工具持怀疑态度。这种观点很有价值,特别是如果您是使用许多不同硬件设备的系统管理员。然而,对于开发人员或最终用户来说,我想说这一切都与生产力有关。如果我找到了一种用户友好的替代工具,那么在我的工作环境中采用易于使用的版本来节省我的宝贵时间不会有任何问题。无需对被取代的东西保持忠诚和虔诚。毕竟,选择是 Linux 最好的事情。
在这篇文章中,我将回顾一下 HTTPie,并向您展示 HTTPie 作为 wget
和 curl
的用户友好替代品的含义。

在 Linux 上安装 HTTPie
HTTPie 是用 Python 编写的,因此您几乎可以在任何地方安装它(Linux、MacOSX、Windows)。更好的是,它作为大多数 Linux 发行版上的预构建包提供。
对于 Debian、Ubuntu 或 Linux Mint:
$ sudo apt-get install httpie
对于费多拉:
$ sudo yum install httpie
对于 CentOS 或 RHEL:
首先,启用 EPEL 存储库,然后运行:
$ sudo yum install httpie
对于任何 Linux:
对于任何 Linux 发行版,另一种安装方法是使用 pip
。
$ sudo pip install --upgrade httpie
HTTPie 示例
安装 HTTPie 后,您可以通过键入 http
命令来调用它。在本文的其余部分中,我将展示 http
命令的几个有用示例。
示例 1:自定义标头
您可以按
格式设置自定义标头。例如,让我们使用自定义用户代理 (linux教程.com/1.0
) 和引用者 (http://linux教程
) 以及自定义标头 (MyParam:Foo
) 向 www.test.com
发送 HTTP GET 请求。
$ http www.test.com User-Agent:linux教程/1.0 Referer:http://linux教程 MyParam:Foo
请注意,当使用 HTTP GET 方法时,不需要指定任何 HTTP 方法。
HTTP 请求将如下所示:
GET / HTTP/1.1
Host: www.test.com
Accept: */*
Referer: http://linux教程
Accept-Encoding: gzip, deflate, compress
MyParam: Foo
User-Agent: linux教程/1.0
示例 2:下载文件
您可以使用http
作为文件下载工具。您需要将输出重定向到文件,如下所示。
$ http www.test.com/my_file.zip > my_file.zip
或者:
$ http --download www.test.com/my_file.zip
示例 3:自定义 HTTP 方法
除了默认的 GET 方法外,您还可以使用其他方法(例如 PUT、POST、HEAD)。例如,发送 HTTP PUT 请求:
$ http PUT www.test.com name='Dan Nanni' [email
示例 4:提交表格
使用 http
命令提交表单非常简单:
$ http -f POST www.test.com name='Dan Nanni' comment='Hi there'
-f
选项允许 http
命令序列化数据字段,并将 Content-Type
设置为“application/x-www-form-urlencoded; charset=utf-8
”。
HTTP POST 请求将如下所示:
POST / HTTP/1.1
Host: www.test.com
Content-Length: 31
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Accept-Encoding: gzip, deflate, compress
Accept: */*
User-Agent: HTTPie/0.8.0
name=Dan+Nanni&comment=Hi+there
示例 5:JSON 支持
HTTPie 具有内置的 JSON 支持,考虑到它作为一种数据交换格式日益流行,这一点很好。事实上,HTTPie 使用的默认内容类型是 JSON。因此,如果您发送数据字段而不指定任何内容类型,它们将自动序列化为 JSON 对象。
$ http POST www.test.com name='Dan Nanni' comment='Hi there'
HTTP POST 请求将如下所示:
POST / HTTP/1.1
Host: www.test.com
Content-Length: 44
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate, compress
Accept: application/json
User-Agent: HTTPie/0.8.0
{"name": "Dan Nanni", "comment": "Hi there"}
示例 6:输入重定向
HTTPie 的另一个用户友好的功能是输入重定向,您可以在其中向 HTTP 请求正文提供缓冲数据。例如,您可以执行以下操作:
$ http POST api.test.com/db/lookup < my_info.json
或者:
$ echo '{"name": "Dan Nanni"}' | http POST api.test.com/db/lookup
结论
在本文中,我向您介绍 HTTPie,它是 wget
或 curl
的可能替代方案。除了这里介绍的这些简单示例之外,您还可以在官方网站上找到许多有趣的 HTTPie 使用案例。再次强调,一个强大的工具的好坏取决于您对该工具的了解。就我个人而言,我很喜欢 HTTPie,因为我一直在寻找一种更轻松地测试复杂 Web API 的方法。
你有什么想法?