一、为什么需要HTTP Client CLI?
想象一下这个场景:
你刚写完一个Go微服务,需要在开发环境测试 → 测试环境验证 → CI流水线自动化检查 → 生产环境上线前最终确认。每次切换环境都要手动改URL、Token、端口... 😫
HTTP Client CLI就是为解决这个问题而生的!它让你:
✅ 脱离IDE,在终端直接运行.http测试文件
✅ 一套测试脚本适配多环境(dev/test/prod)
✅ 无缝集成到GitHub Actions、GitLab CI等流水线
✅ 用熟悉的语法写测试,无需学习curl复杂参数
二、三步安装CLI工具
2.1 三种安装方式任你选
# 方式1:Homebrew(macOS/Linux)
brew install ijhttp
# 方式2:直接下载ZIP
curl -f -L -o ijhttp.zip "https://jb.gg/ijhttp/latest"
unzip ijhttp.zip
chmod +x ijhttp
# 方式3:Docker(最推荐,环境隔离)
docker pull jetbrains/intellij-http-client
2.2 验证安装成功
# 本地安装
ijhttp --version
# Docker方式
docker run --rm jetbrains/intellij-http-client --version
💡 小贴士:Docker方式最适合CI/CD,避免环境差异问题!
三、环境变量:CLI的灵魂功能
HTTP Client CLI支持两类环境变量,完美区分公开配置和敏感信息:
| 类型 | 用途 | 文件命名 | 命令行参数 |
|---|---|---|---|
| Public(公开) | URL、端口、版本号等 | http-client.env.json | --env-file + -V |
| Private(私有) | 密码、Token、密钥等 | http-client.private.env.json | --private-env-file + -P |
3.1 创建环境文件
http-client.env.json(公开配置):
{
"dev": {
"baseUrl": "http://localhost:8080",
"apiVersion": "v1"
},
"test": {
"baseUrl": "https://test-api.example.com",
"apiVersion": "v1"
},
"prod": {
"baseUrl": "https://api.example.com",
"apiVersion": "v2"
}
}
http-client.private.env.json(敏感信息,务必加入.gitignore):
{
"dev": {
"apiKey": "dev-secret-123456"
},
"test": {
"apiKey": "test-secret-789012"
},
"prod": {
"apiKey": "prod-secret-345678"
}
}
🔒 安全提醒:私有环境文件绝不能提交到Git!在
.gitignore中添加:http-client.private.env.json *.private.env.json
3.2 在.http文件中使用变量
### 获取用户列表
GET {{baseUrl}}/{{apiVersion}}/users
Authorization: Bearer {{apiKey}}
Content-Type: application/json
###
### 创建新用户
POST {{baseUrl}}/{{apiVersion}}/users
Authorization: Bearer {{apiKey}}
Content-Type: application/json
{
"username": "cli-tester",
"email": "cli@example.com"
}
四、实战:CLI命令行玩法大全
4.1 基础用法:指定环境运行
# 使用dev环境 + 公开环境文件
ijhttp --env-file http-client.env.json --env dev api.http
# 使用test环境 + 公开+私有环境文件
ijhttp \
--env-file http-client.env.json \
--private-env-file http-client.private.env.json \
--env test \
api.http
4.2 覆盖变量:临时修改参数
# 临时覆盖baseUrl(不影响环境文件)
ijhttp \
--env-file http-client.env.json \
--env dev \
-V baseUrl=http://staging.example.com \
api.http
# 同时覆盖多个变量
ijhttp \
-V baseUrl=http://localhost:9090 \
-V apiVersion=v2 \
-P apiKey=my-temp-token \
api.http
4.3 Docker中运行(推荐用于CI)
# 基础运行(挂载当前目录)
docker run --rm -v $PWD:/workdir \
jetbrains/intellij-http-client \
api.http
# 指定环境 + 解析宿主机localhost
docker run --rm -v $PWD:/workdir \
jetbrains/intellij-http-client \
--env-file http-client.env.json \
--env dev \
-D \ # 关键:让容器内localhost指向宿主机
api.http
💡 -D参数妙用:当你在Docker容器中测试宿主机运行的Go服务时,
-D会自动将localhost解析为宿主机IP(Mac/Windows用host.docker.internal,Linux用--network=host)
4.4 日志级别控制
# 默认:只显示请求摘要
ijhttp api.http
# 显示请求/响应头
ijhttp -L HEADERS api.http
# 显示完整请求/响应(含Body)
ijhttp -L VERBOSE api.http
五、Go项目实战:CI/CD集成示例
5.1 项目结构规划
my-go-api/
├── .http/
│ ├── users.http # 用户API测试
│ ├── auth.http # 认证API测试
│ └── http-client.env.json
├── .github/workflows/
│ └── api-test.yml # GitHub Actions配置
├── internal/
│ └── handler/
│ └── user.go # Go业务代码
├── go.mod
└── .gitignore
5.2 编写带断言的测试脚本
### 测试:创建用户应返回201
POST {{baseUrl}}/{{apiVersion}}/users
Authorization: Bearer {{apiKey}}
Content-Type: application/json
{
"username": "test_user",
"email": "test@example.com"
}
> {%
// 响应断言(JavaScript ES6语法)
client.test("Status should be 201", function() {
client.assert(response.status === 201, "Expected status 201, got " + response.status);
});
client.test("Response should have user ID", function() {
const body = response.body.json();
client.assert(body.id !== undefined, "User ID is missing in response");
});
%}
###
### 测试:获取用户列表
GET {{baseUrl}}/{{apiVersion}}/users
Authorization: Bearer {{apiKey}}
> {%
client.test("Should return array of users", function() {
const body = response.body.json();
client.assert(Array.isArray(body), "Response should be an array");
client.assert(body.length > 0, "User list should not be empty");
});
%}
总结:为什么选择HTTP Client CLI?
| 对比项 | curl | Postman CLI | HTTP Client CLI |
|---|---|---|---|
| 语法友好度 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 环境变量管理 | ❌ | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| 与IDE无缝衔接 | ❌ | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| CI/CD集成难度 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| 响应断言能力 | ❌ | ⭐⭐ | ⭐⭐⭐⭐ |
核心价值:
🚀 一套.http文件,覆盖开发、测试、CI全流程
🔐 公开/私有变量分离,安全与便利兼得
🤖 无缝衔接GoLand,所见即所得
📊 生成JUnit报告,测试结果可视化
💬 最后建议:在你的Go项目中建立
.http/目录,将API测试脚本纳入版本控制(排除私有文件),让每个PR都自带可运行的测试用例——这才是现代Go开发的正确姿势!
