• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

人性化的类cURL工具:HTTPie

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

上述查询给出以下响应:

人性化的类cURL工具:HTTPie  第1张

这看起来好像 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&amp;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 字母,应该会显示自动完成。

人性化的类cURL工具:HTTPie  第2张

输入httpie,它应该显示我们正在查询的 URL。

http http://localhost:3000/users

所有 HTTPie 请求命令都应该在http-prompt. 尝试输入 GET,它应该会在自动完成中弹出。输入 GET 命令后,应显示以下响应。

人性化的类cURL工具:HTTPie  第3张

最后

在本教程中,我们了解了如何开始使用 HTTPie,这是一种更人性化的 curl替代方案。我们看到了如何使用 HTTPie 和其他一些功能来执行基本的请求操作,例如 GET 和 POST。有关使用的深入信息HTTPie,请查看官方文档

文章目录
  • 入门
  • 使用 HTTPie 执行基本请求
    • 使用 HTTPie 获取请求
    • 使用 HTTPie发布请求
  • 使用 HTTPie 提交表单
  • 处理 HTTP 重定向
  • 使用 HTTPie 下载文件
  • 处理认证
  • 自定义响应显示
  • 维护会话
  • 使用 HTTP 提示自动完成
  • 最后