WEB应用开发或者测试的时候,总免不了需要发送 HTTP 请求。

首先请你想一下,我们要发送一个HTTP请求的时候,脑海中出现的是怎样一种顺序呢?
我猜,大概和HTTP规范里的写法也差不了太多。基本会是:我要发送一个 GET/POST 请求到 XX网站。 传X,Y,Z这几个参数。或者是我要发XX网站发送X,Y这几个参数,上传Z文件之类的。

这种时候,你一般是用什么工具测试呢? Postman,Curl?

啊哈,我一般也是用这两个工具。

我想大家基本类似。图形界面的工具一般用 Postman, 命令行工具,则会使用 curl。不过话说回来,curl命令除了个别的几个参数,大部分都记不住。经常都是用到的时候现去查。

后来在 Spring 大会上,看几个演讲者都在使用几个不错的命令行工具。其中进行HTTP 请求测试的工具是个名为「HTTP派」的工具。最近查到了,就是下面这个: 「HTTPie」,分享给大家。

这是个什么工具呢?

官网:https://httpie.org/

官网介绍的时候,还贴心的把发音都给加上了「aitch-tee-tee-pie」。
官网概括的是这样一句话:

a command line HTTP client with an intuitive UI, JSON support, syntax highlighting, wget-like downloads, plugins, and more。

特点如下:
富有表现力,语法直观
格式化和带彩色的终端输出
内置对 JSON 的支持
支持表单和文件上传
支持 HTTPS、代理以及认证
任意请求数据
自定义 headers
持久化 sessions
类似 Wget 的下载
支持 Linux, Mac OS X 和 Windows 系统
支持插件

[开发利器] 命令行请求,还得看革 curl 命的 httpie_java

回到前面的场景,我们通过命令行发送一个请求的时候,在 HttpPie 里异常简单。

http GET localhost:8080

即可。

我们看到,整个用起来,很符合我们语言描述的习惯。发送请求,要使用的HTTP 方法, 目标地址 传递参数等等。

比如我们要发送的是 POST 请求,并且带参数,那直接这样写

http POST  abc.com/test abc=def userid=123

这样就给abc.com/test 发了一个 POST 请求,带了两个参数: abc 和userid
而且,更有趣的是,这两个参数默认会被以application/json的形式传递,我们不再需要将所有的参数整合成json串,也不需要显式的指点ContentType。

如果我们是在本地调试,那更简单了。
直接执行 http :8080/context 就把请求发到了应用上。连 localhost 都省了。

更方便的是,你想把本地的一个txt文件或者JSON文件做为参数内容传递,那直接在参数里写成这样即可

desc=@filename.txt

要把JSON 请求改成 form 提交,也很简单, http -f 。增加一个 「-f」的选项就实现了。

你说页面上有安全验证,那也难不倒它。 我们以测试 tomcat 的 manager 应用为例,

http -a tomat:tomcat  :8080/manager/html

-a 指定了要进行BASIC认证。
用户名:密码 就完成了认证,着实简单了不少。

如果嫌输出的内容多,你只关心header或者body,那加个参数就OK,比如在请求中加-h 代表输出header信息, -b就表示输出 body的信息。

要下载一个文件,也是 So easy:

http --download https://github.com/jkbrzt/httpie/archive/master.tar.gz

自己本地操作想要实验一下,也不需要自己写 Demo。 启动起来 Tomcat,自带的 manager 应用可以验证 BASIC 认证, examples 里可以验证 POST 请求,from 提交等等。

看了半天,想不想试试?
安装也简单,在各个操作系统上安装都不难。
从名字里大概也听的出来,Pie 和 py 一个音,所以这货是基于python 的,Windows 平台安装的时候直接通过python 的 pip 安装 httpie 就行。

Linux/Mac 我想更难不倒你。 brew/yum 这类命令更是直达目标。

不想安装尝个鲜? 官网也提供了一个在线的工具:
https://httpie.org/run 访问之后就是个在线的Linux 命令行,直接就能上手操作了。