前言
idea推出了一个新功能http client,可以媲美postman,基本上实现了postman的绝大多数核心功能,更重要的是它的请求数据是纯文本的,非常方便,结合自动化脚本,很有想象空间,比如自动生成测试脚本,自动化测试等
1. 准备
要想使用这个功能需要2017.3以上的版本,但是老版本的这个功能很弱,所以建议升级到2019.3的版本可以享受全部新能力。
默认情况插件**Java EE: RESTful Web Services (JAX-RS)**是安装了并且启用了,如果没有可以到设置里面去安装并启动下
2.创建HTTP Client文件
2.1 直接创建文件
选择路径 -> 右键 -> 新建 -> Http Request
先择路径 -> 文件菜单 -> 新建 -> Http Request
2.2 创建草稿文件
Ctrl/Command + Shift+ Alt+ Insert
选择Http Request
3. 语法
每个请求都是以文本是形式存储起来,http后缀的文本文件,一个文件里面可以存储多个请求。
它的语法格式跟http请求的内容很接近
请求方法, 请求url,换行加上header参数,如果有body体,空一行加上body体
Method Request-URI HTTP-Version
Header-field: Header-value
Request-Body
下面是一个示例
POST http://test.abc.com/user
accept: */*
Content-Type: application/json;charset=UTF-8
{"uid":"test1", "token":"122asseeeddd", "age":32}
3.1. 注释使用#或者//
3.2. 如果是get请求可以省略方法说明,直接写url
3.3. 一个文件中多个请求以###分割
3.4. body内容可以来自一个文件语法如下
<./input.json
3.5. 请求也可以传文件,语法如下
POST http://example.com/api/upload HTTP/1.1
Content-Type: multipart/form-data; boundary=boundary
--boundary
Content-Disposition: form-data; name="first"; filename="input.txt"
// The 'input.txt' file will be uploaded
< ./input.txt
--boundary
Content-Disposition: form-data; name="second"; filename="input-second.txt"
// A temporary 'input-second.txt' file with the 'Text' content will be created and uploaded
Text
--boundary
Content-Disposition: form-data; name="third";
// The 'input.txt' file contents will be sent as plain text.
< ./input.txt --boundary--
3.6. @no-redirect注解:可以关闭重定向
// @no-redirect
example.com/status/301
3.7. @no-log注解:可以阻止请求记录到历史记录
// @no-log
GET example.com/api
3.8 @no-cookie-jar: 可以阻止保存cookies数据
// @no-cookie-jar
GET example.com/api
3.9 使用变量
它定义了3个变量
- $uuid 唯一标识符(UUID-v4)
- $timestamp 当前时间
- $randomInt 0-1000的随机整数
GET http://localhost/api/get?id={{$uuid}}
4. 快速生成请求
4.1 打开请求文件,点击Add Request菜单
从这里可以快速添加GET请求和POST请求的模板
4.2 Convert from cURL
这个功能可以将浏览器网络请求生成的curl命令直接导入,注意如果命令里面带–compressed后缀,需要将此后缀去掉再导入
4.3 Live Template
系统默认预置了几个基本的命令,可以快速生成GET和POST请求,这个跟Add Reqeust是对应的,可以修改他们。
还可以补充新的,注意如果新增要选择可用的文件为Http Request
4.4 Examples
选择Examples,从里面选择合适的复制粘贴过来
5.环境变量
在同目录下新建一个http-client.env.json (or rest-client.env.json)文件
就是一个配置文件,语法很简单,如下是示例
{
"development": {
"host": "localhost",
"id-value": 12345,
"username": "",
"password": "",
"my-var": "my-dev-value"
},
"production": {
"host": "example.com",
"id-value": 6789,
"username": "",
"password": "",
"my-var": "my-prod-value"
}
}
使用起来很简单
GET http://{{host}}/api/json/get?id={{id-value}}&key={{unresolved_var}}
Authorization: Basic {{username}} {{password}}
Content-Type: application/json
{
"key": {{my-var}}
}
运行请求的时候会让你选环境的,选了环境就会用对应的变量替换请求里面的占位符。还有个http-client.private.env.json,语法用法一样,这个文件是用来存一些敏感信息,把它加到.gitignore就不会到代码库里面了,感觉用途不大。
6. 处理响应
这个算高级功能了,可以写一段javascript(JavaScript ECMAScript 5.1)脚本来处理接口返回的信息,语法如下
GET host/api/test
> {%
// Response handler script
...
%}
###
host/api/test
> scripts/my-script.js
处理响应的第一个用途是测试,要实现这个功能得益于Http Response Handler的两个对象:
6.1 client对象
这个对象保存了session信息,可以在js脚本里被修改,而且它还可以定义client.global变量,这个变量是全局的,可以像环境变量一样使用{{variable_name}}.
这个功能很强大可以实现自动登录读取cookie并设置全局变量。该对象会在IDEA关闭后失效。
它还有两个测试方法test, assert
详细语法参考:HTTP Client reference
POST https://httpbin.org/cookies
//Saving a cookie from the first Set-Cookie header
> {%
client.global.set("my_cookie", response.headers.valuesOf("Set-Cookie")[0]);
%}
6.2 response对象
响应对象,包含content-type,status,response body等。
详细语法参考:HTTP Response reference
GET https://httpbin.org/status/200
> {%
client.test("Request executed successfully", function() {
client.assert(response.status === 200, "Response status is not 200");
});
%}
7. 运行Http Request
7.1 直接在http文件里面点绿色三角形运行
直接执行会创建一个临时的run/debug配置,保存后可以快捷运行请求
7.2 创建run/debug configuration运行
在请求上点右键选择**[创建 ’http-request#1‘]**
如果有环境变量会让你设置运行的环境变量
创建完就可以run/debug下拉列表里面选中并快速运行请求了
7.3 查看请求响应
进入run窗口,选中对应的请求标签页,即可看到响应,可以选择查看格式:
XML,JSON,HTML
8. 其他功能
8.1 查看历史请求
Tool -> Http Client -> SHow Http Requests History
8.2 配置代理
既然是http请求,那自然是可以设置代理,这个功能它也是支持的。
Settings -> System Settings -> Apperance & Behavior -> HTTP Proxy
参考文档:
- https://www.jetbrains.com/help/idea/restful-webservices.html?keymap=primary_default_for_windows