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.tutsplus.com
上面的查询给出以下响应:
看起来好像已安装HTTPie并在系统上正常工作。 如果仔细观察,上述命令的彩色输出显示该URL已永久移动到https://tutsplus.com 。 因此,要对tutsplus进行GET请求查询,请修改查询:
http https://tutsplus.com
上面的查询将在URL https://tutsplus.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获取请求
默认情况下,如果将URL分配给HTTPie,它将假定请求类型为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的POST请求
要使用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,通过指定如下所示的form
选项,通过URL提交表单变得相当容易。
http --form POST www.yourformposturl.com name='Roy'
执行以上命令后, Content-Type
会自动设置为application/x-www-form-urlencoded; charset=utf-8
application/x-www-form-urlencoded; charset=utf-8
,因此您不需要显式设置它。
处理HTTP重定向
就像您在前面的示例中可能已经注意到的那样,默认情况下HTTPie不处理HTTP重定向。 当我们尝试在www.tutsplus.com上执行GET请求时,它显示一条消息,指出URL已被移动。 如果希望HTTPie处理重定向,则需要在request命令中添加一个名为follow
的选项。
http --follow www.tutsplus.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提供了一个用于定制输出响应的选项。 您可以通过指定--header
和--body
选项以及请求来打印各个标题和正文信息。
http https://www.tutsplus.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://tutsplus.com/
Server: cloudflare-nginx
Set-Cookie: __cfduid=dfea480f2567e7c463e66999adfdc73d71477238552; expires=Mon, 23-Oct-17 16:02:32 GMT; path=/; domain=.tutsplus.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
要开始会话,请使用将要查询的服务器URL调用http-prompt
。 重新启动我们安装的json-server
并调用http-prompt
,如下所示:
http-prompt http://localhost:3000/users
输入一些HTTP字母,自动完成应显示出来。
输入httpie
,它应该显示我们正在查询的URL。
http http://localhost:3000/users
所有HTTPie request命令都应在http-prompt
。 尝试输入GET,它将自动弹出。 输入GET命令后,将显示以下响应。
包起来
在本教程中,我们了解了如何开始使用HTTPie
(一种更人性化的cURL替代方法)。 我们看到了如何使用HTTPie和其他一些功能来执行诸如GET和POST之类的基本请求操作。 有关使用HTTPie
的详细信息,请查看官方文档 。 另请查看http-prompt
的官方文档 。 请在下面的评论中告诉我们您的想法。
翻译自: https://code.tutsplus.com/tutorials/httpie-a-human-friendly-curl-like-tool--cms-27310