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 系统
支持插件
…
回到前面的场景,我们通过命令行发送一个请求的时候,在 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 命令行,直接就能上手操作了。