curl是用于发出 HTTP 请求的常用命令行工具。在本教程中,我们将了解HTTPie,这是一个命令行工具,用于以人性化的方式发出 HTTP 请求。HTTPie 使用语法简单自然的命令,并以一种像样的方式显示输出。
来自官方文档:
HTTPie(发音为 aitch-tee-tee-pie)是一个命令行 HTTP 客户端。它的目标是使 CLI 与 Web服务的交互尽可能人性化。它提供了一个简单的 http 命令,允许使用简单自然的语法发送任意 HTTP 请求,并显示彩色输出。HTTPie 可用于测试、调试以及通常与 HTTP 服务器交互。
入门
为了在 Ubuntu 机器上开始使用 HTTPie ,您需要使用 apt-get 安装该软件包。
sudo apt-get install httpie
安装后,您的系统上应该有 HTTPie。尝试使用 HTTPie 向任何网站发出 GET 请求:
http www.www.weixiaolive.com
上述查询给出以下响应:
这看起来好像 HTTPie 已安装并在您的系统上运行。如果仔细观察,上述命令的彩色输出显示 URL 已永久移动到https://www.weixiaolive.com。因此,要在 tutsplus 上执行 GET 请求查询,请修改查询:
http https://www.weixiaolive.com
上述查询将返回URL https://www.weixiaolive.com上的 GET 请求的html输出。
从上面的查询可以看出,HTTPie执行请求所需的唯一信息是 URL。
使用 HTTPie 执行基本请求
在深入研究 HTTPie 命令之前,我们将了解如何使用 HTTPie 执行基本请求。我们将使用json-server来启动并运行一个虚拟服务器来发出请求。要开始使用 json-server,请使用 npm 安装服务器。
npm install -g json-server
创建一个名为的文件,该文件index.js将为我们的虚拟服务器创建一些随机 数据。
// index.js module.exports = function() { var data = { users: [] } // Create 5 users for (var i = 0; i < 5; i++) { data.users.push({ id: i, name: 'user' + i }) } return data }
index.js使用该文件运行 json 服务器。
json-server index.js
现在服务器应该在 http://localhost:3000/启动并运行。
使用 HTTPie 获取请求
默认情况下,如果给 HTTPie 一个 URL,它会假定请求类型为 GET 并相应地执行。下面是一个GET请求示例:
http http://localhost:3000/users
上述请求显示以下输出:
HTTP/1.1 200 OK Access-Control-Allow-Credentials: true Cache-Control: no-cache Connection: keep-alive Content-Length: 212 Content-Type: application/json; charset=utf-8 Date: Tue, 18 Oct 2016 03:40:15 GMT ETag: W/"d4-4+4+bS4GA0+D/tDXlF8voQ" Expires: -1 Pragma: no-cache Vary: Origin, Accept-Encoding X-Content-Type-Options: nosniff X-Powered-By: Express [ { "id": 0, "name": "user0" }, { "id": 1, "name": "user1" }, { "id": 2, "name": "user2" }, { "id": 3, "name": "user3" }, { "id": 4, "name": "user4" } ]
使用 HTTPie发布请求
要使用 HTTPie 执行 post 请求,我们需要添加 POST 关键字以及要发布到 URL 的数据。这是一个例子:
http POST http://localhost:3000/users id=007 name=RoyAgasthyan
该命令将在终端屏幕上显示以下输出:
HTTP/1.1 201 Created Access-Control-Allow-Credentials: true Cache-Control: no-cache Connection: keep-alive Content-Length: 43 Content-Type: application/json; charset=utf-8 Date: Tue, 18 Oct 2016 03:46:22 GMT ETag: W/"2b-mpj//lkYJiGiWBB42OLoKA" Expires: -1 Pragma: no-cache Vary: Origin, X-HTTP-Method-Override, Accept-Encoding X-Content-Type-Options: nosniff X-Powered-By: Express { "id": "007", "name": "RoyAgasthyan" }
尝试使用 HTTPie 执行 GET 请求,您应该会在响应中看到新发布的数据。
使用 HTTPie 提交表单
提交表单是用户通常执行的另一个请求。使用 HTTPie,通过指定选项通过 URL 提交表单变得相当容易,form如下所示:
http --form POST www.yourformposturl.com name='Roy'
执行上述命令时,Content-Type会自动设置为 application/x-www-form-urlencoded; charset=utf-8,因此您无需显式设置。
处理 HTTP 重定向
正如您在前面的示例中可能已经注意到的那样,默认情况下 HTTPie 不处理 HTTP 重定向。当我们尝试在www.www.weixiaolive.com上执行 GET 请求时,它会显示一条消息,说明 URL 已被移动。如果您希望 HTTPie 处理重定向,您需要添加一个名为followrequest 命令的选项。
http --follow www.www.weixiaolive.com
上面的 HTTPie 查询将处理 HTTP 重定向,如果有的话。
使用 HTTPie 下载文件
HTTPie 提供了从服务器下载文件的功能,类似于 wget 命令。为了下载文件,您需要指定一个download选项以及 URL。
http --download http://www.tutorialspoint.com/python/python_tutorial.pdf
上面的命令将显示如下所示的响应:
HTTP/1.1 200 OK Accept-Ranges: bytes Access-Control-Allow-Headers: X-Requested-With Access-Control-Allow-Origin: * Content-Length: 3945951 Content-Type: application/pdf Date: Tue, 18 Oct 2016 04:01:43 GMT Etag: "3c35df-52fe21b892a6f" Last-Modified: Thu, 07 Apr 2016 09:57:34 GMT Server: ECS (pnq/AF9A) X-Cache: HIT Downloading 3.76 MB to "python_tutorial.pdf-1" | 28.03 % 1.05 MB 63.85 kB/s 0:00:43 ETA
处理认证
访问 Web 服务 URL需要某种或其他类型的身份验证。HTTPie 支持大多数常用的身份验证机制。默认情况下,HTTPie 支持基本身份验证,因此您只需将用户名和密码传递给带有 -a选项的请求即可。
http -a username:password www.mywebservice.com
要使用摘要式身份验证,您需要使用该-A选项传入身份验证机制名称。
http -A digest -a username:password www.myservice.com
自定义响应显示
当我们向一个 URL 发出请求时,所有数据连同头部信息都会显示在终端中。HTTPie 提供了自定义输出响应的选项。您可以通过在请求中指定--headerand选项来打印单个标题和正文信息。--body
http https://www.www.weixiaolive.com --header
上面的命令将打印标题信息,如下所示:
HTTP/1.1 301 Moved Permanently CF-RAY: 2f6669f88fc43548-LHR Connection: keep-alive Date: Sun, 23 Oct 2016 16:02:32 GMT Location: https://www.weixiaolive.com/ Server: cloudflare-nginx Set-cookie: __cfduid=dfea480f2567e7c463e66999adfdc73d71477238552; expires=Mon, 23-Oct-17 16:02:32 GMT; path=/; domain=.www.weixiaolive.com; HttpOnly Transfer-Encoding: chunked
现在,如果您尝试使用 HTTP 请求和--body选项,它应该只打印正文部分。
http www.google.com --body
上面的命令将打印以下输出:
<HTML> <HEAD> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE> </HEAD> <BODY> <H1>302 Moved</H1> The document has moved <A HREF="http://www.google.co.in/?gfe_rd=cr&ei=OBwQWPO7Juyq8wf13bzYBw">here</A>. </BODY> </HTML>
维护会话
在使用 HTTPie 时,每个请求都独立于其他请求。如果我们想为其他 HTTP 请求保留会话,我们可以保留会话。为了维护会话,我们需要做的就是创建一个命名会话,如下所示:
http --session=roy -a roy:mypass www.myservice.com
上面的命令将创建一个称为会话的会话,该会话roy可以通过使用会话名称用于其他请求。这是一个使用会话的示例roy:
http --session=roy www.myservice.com
使用 HTTP 提示自动完成
可能很难记住与 HTTPie 相关的所有命令。该 http-prompt工具包提供了可与 HTTPie 一起使用的自动完成功能。要开始使用http-prompt,请使用以下命令安装它pip:
sudo pip install http-prompt
要启动会话,http-prompt请使用我们将要查询的服务器 URL 调用。我们安装并调用的rest art ,如图所示:json-serverhttp-prompt
http-prompt http://localhost:3000/users
输入几个 HTTP 字母,应该会显示自动完成。
输入httpie,它应该显示我们正在查询的 URL。
http http://localhost:3000/users
所有 HTTPie 请求命令都应该在http-prompt. 尝试输入 GET,它应该会在自动完成中弹出。输入 GET 命令后,应显示以下响应。
最后
在本教程中,我们了解了如何开始使用 HTTPie,这是一种更人性化的 curl替代方案。我们看到了如何使用 HTTPie 和其他一些功能来执行基本的请求操作,例如 GET 和 POST。有关使用的深入信息HTTPie,请查看官方文档
- 使用 HTTPie 获取请求
- 使用 HTTPie发布请求