Idea HttpClient
1. 简介
HTTP Client 是 IntelliJ IDEA Ultimate 版的一个基于文本的工具,支持 HTTP、gRPC、GraphQL 和 WebSocket 请求。它通过 .http
或 .rest
文件存储请求,提供语法高亮、代码补全和内联文档,方便开发者管理和执行请求。
作用与目的:
- 主要用于开发和测试 RESTful Web 服务,确保 API 符合预期并返回正确响应。
- 帮助开发与 RESTful 服务交互的应用,调查访问方式和输入数据需求。
- 适用场景包括 API 测试、调试和开发过程中的服务交互。
与 IDE 的集成优势:
- 无需离开 IDE,减少上下文切换,提升效率。
- 提供编码辅助,如语法高亮和补全,降低错误率。
- 支持多种协议,满足不同 API 技术需求。
根据官方文档,HTTP Client 自 2024.1 版本起支持 HTTP/2,默认对安全连接使用 HTTP/2,非安全连接使用 HTTP/1.1,可手动指定(如 GET <https://example.org> HTTP/2
)。
2. 基本功能
2.1 创建和发送 HTTP 请求
-
创建方式:
- 临时文件:按
Ctrl+Alt+Shift+Insert
选择 "HTTP Request",生成 scratch 文件,不存储在项目中。 - 物理文件:File > New > HTTP Request,创建存储在项目中的
.http
文件。
- 临时文件:按
-
语法: 使用以下格式:
jsxHTTP_METHOD URL Header-field: Header-value Request-Body
-
发送请求: 点击 gutter 的 Run 图标(▶️),响应在 Services 工具窗口显示。
示例:
jsx
GET <https://api.example.com/users/1>
Accept: application/json
2.2 支持的 HTTP 方法
- GET:获取资源。
- POST:提交数据创建资源。
- PUT:更新现有资源。
- DELETE:删除资源。
- PATCH:部分更新资源。
- HEAD:获取头信息,无正文。
- OPTIONS:描述通信选项。
2.3 查看和管理响应
- 响应包括状态码、头和正文,格式化显示为文本、JSON、XML 或 HTML。
- 支持预览图片、PDF 和 HTML 内容。
- 最近 50 次响应保存在
.idea/httpRequests/
目录,历史记录可在 Tools | HTTP Client | Show HTTP Requests History 查看。
3. 请求配置
3.1 请求头
- 在请求行后添加,格式为
Header-field: Header-value
,IDE 提供补全建议。
示例:
jsx
POST <https://api.example.com/login>
Content-Type: application/json
Authorization: Bearer my-token
3.2 请求体
- 支持 JSON、XML、表单数据等格式。
示例:
jsx
POST <https://api.example.com/users>
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com"
}
3.3 查询参数
- 直接附加在 URL 后,如
?page=1&sort=asc
。
示例:
jsx
GET <https://api.example.com/users?page=1&sort=asc>
3.4 文件上传
- 使用 multipart/form-data,
<
符号引入本地文件。
示例:
jsx
POST <https://api.example.com/upload>
Content-Type: multipart/form-data; boundary=boundary
--boundary
Content-Disposition: form-data; name="file"; filename="data.txt"
Content-Type: text/plain
< ./data.txt
--boundary--
4. 环境和变量
4.1 环境文件
- 在
http-client.env.json
或http-client.private.env.json
定义环境变量,后者适合敏感数据。
示例:
json
{
"dev": {
"baseUrl": "<https://dev.api.example.com>",
"apiKey": "dev-key"
},
"prod": {
"baseUrl": "<https://api.example.com>",
"apiKey": "prod-key"
}
}
4.2 变量使用
- 用
{{variable}}
引用变量,可在 Services 工具窗口选择环境,或用# @environment = dev
指定。
示例:
vbnet
GET {{baseUrl}}/users
X-API-Key: {{apiKey}}
5. 脚本功能
5.1 预请求脚本
- 在
< {% ... %}
中编写,运行于请求前,可设置变量或修改请求。
示例:
jsx
> {%
request.variables.set("ts", new Date().toISOString());
%}
POST <https://api.example.com/data>
Content-Type: application/json
{
"timestamp": "{{ts}}"
}
5.2 响应处理脚本
- 在
> {% ... %}
中编写,运行于响应后,可处理数据或设置变量。
示例:
jsx
POST <https://api.example.com/login>
Content-Type: application/json
{
"username": "user",
"password": "pass"
}
> {%
client.global.set("token", response.body.json().token);
%}
5.3 测试脚本
- 使用
client.test
和client.assert
验证响应,测试结果在 Services 工具窗口的 Tests 标签页显示。
示例:
jsx
GET <https://api.example.com/users>
> {%
client.test("Check status", function() {
client.assert(response.status === 200, "Status is not 200");
});
%}
6. 高级功能
功能 | 描述 | 示例 |
---|---|---|
HTTP/2 支持 | 可指定 HTTP 版本,如 GET <https://example.org> HTTP/2 |
GET <https://api.example.com/users> HTTP/2 |
Cookie 管理 | 自动保存,最多 300 个,可用 # @no-cookie-jar 禁用 |
# @no-cookie-jar GET <https://api.example.com/login > |
超时设置 | 用 # @timeout 5s 设置超时 |
# @timeout 5s GET <https://api.example.com/data > |
响应重定向 | 用 >> ./response.json 保存响应 |
GET <https://api.example.com/data> >> ./response.json |
GraphQL 支持 | 以 GRAPHQL 开头,支持变量 |
POST <https://api.example.com/graphql> {"query": "query { user(id: 1) { name } }"} |
WebSocket 支持 | 以 WEBSOCKET 开头,用 === 分隔消息 |
WEBSOCKET wss://echo.websocket.org === Hello, WebSocket! === wait-for-server |
gRPC 支持 | 以 GRPC 开头,从 .proto 文件补全 |
暂无具体示例,需结合 .proto 文件使用 |
7. 与 IDE 的集成
- 从代码生成请求: 对于 Spring Boot,点击 REST 控制器方法旁边的 gutter 图标生成请求。
- OpenAPI 集成: 从 OpenAPI 规范生成请求,提供 URL 和 JSON 体的补全。
- 调试器集成: 在调试时发送请求,检查应用状态。
- Services 工具窗口: 集中管理请求和响应,提升效率。
- 版本控制: 请求文件可通过 VCS 共享,方便团队协作。
8. HTTP Client CLI
CLI 版本允许在终端运行 .http
文件,适合自动化和 CI/CD 集成。
-
下载方式:从 JetBrains 网站获取 ZIP 包或 Docker 镜像。
-
使用示例:
bashijhttp --env-file http-client.env.json --env dev requests.http
9. 综合代码示例
以下是一个完整的 .http
文件示例,展示变量、脚本、测试和多个请求的组合使用:
jsx
# @environment = dev
### 登录
POST {{baseUrl}}/login
Content-Type: application/json
{
"username": "user",
"password": "pass"
}
> {%
client.global.set("token", response.body.json().token);
%}
### 获取用户数据
GET {{baseUrl}}/users
Authorization: Bearer {{token}}
> {%
client.test("Status OK", function() {
client.assert(response.status === 200, "Status not 200");
});
%}
10. 注意事项和总结
- 前提条件: 需要 IntelliJ IDEA Ultimate 版,Community 版不支持。
- 优势:
- 与 IDE 深度集成,减少上下文切换。
- 支持多种协议和高级功能,如 GraphQL、WebSocket。
- 强大的脚本功能,适合动态请求和响应处理。
- 环境和变量管理方便,CLI 版本适合自动化。
- 进一步学习: 更多详情请参考 官方文档。
引文: