API 测试工具

Postman 替代/多 Method/历史

415 次访问

API 在线测试工具

Postman 替代 · GET/POST/PUT/PATCH/DELETE/HEAD/OPTIONS · 浏览器本地

每行一个 Header,格式:Name: Value

响应

尚未发送请求

关于本工具

了解工具定位 · 使用场景 · 对比优势

使用场景

🔧

接口联调验证

前端开发在对接后端 API 时,需要频繁测试 GET/POST/PUT/DELETE 等不同 Method 的响应。本工具支持保存多组请求历史,快速切换 Method 和请求体格式(JSON/Form),无需打开 Postman 即可在浏览器内完成联调,减少 IDE 与外部工具之间的切换成本。

🔄

Mock 接口回归

测试人员在回归验证时,常遇到 Mock 服务返回的数据结构与线上不一致。利用本工具的历史记录功能,可保存每次请求的完整参数和响应,对比不同版本的返回体差异,快速定位字段缺失或类型变更,避免遗漏接口兼容性问题。

📋

第三方 API 接入

接入微信支付 / 阿里云等开放平台时,需要反复调试签名算法和请求头。本工具支持自定义 Header 和 Query 参数,搭配 Method 切换,能逐项验证签名计算是否正确、回调地址是否可达,在正式集成前消除配置错误。

接口性能摸底

后端开发在发布前需了解接口的响应耗时和状态码分布。通过本工具多次发起同一请求,观察每次的响应时间波动,配合状态码判断是否出现 500 或超时,快速识别慢查询或资源竞争问题,无需搭建压测环境。

🔐

鉴权流程调试

OAuth2.0 或 JWT 鉴权中,需按顺序调用登录、刷新 Token、资源请求三个接口。本工具的请求历史功能可保留每次的 Token 和 Cookie,开发者能逐步验证每一步的返回是否正确,确保鉴权链路完整。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A (Postman)传统方法 (cURL/脚本)
数据隐私纯浏览器处理,请求不经过第三方服务器请求通过 Postman 云服务中转(需登录账号)完全本地执行,无外部传输
运行环境无需安装,打开浏览器即用需下载安装桌面客户端需终端环境,依赖命令行技能
请求历史自动保存在浏览器本地 (IndexedDB),关闭页面不丢失需登录账号同步至云端,免费版有历史条数限制需手动保存脚本或输出日志
协作共享不支持团队协作支持工作空间、团队库、分享集合需通过 Git 或文件分享
离线可用完全离线可用(页面加载后)桌面客户端可离线,部分功能(如同步)受限完全离线可用
收费模式免费,无功能限制免费版有每月 API 调用次数限制,协作等功能需付费免费(系统自带或开源工具)
学习成本零学习成本,界面直观功能丰富但界面复杂,新手需学习需记忆参数(-X, -H, -d 等),调试效率低

使用指南

上手步骤 · 输入输出 · 避坑提示

输入输出示例8 个典型场景,覆盖常规、边界与易错

输入输出说明
GET https://jsonplaceholder.typicode.com/posts/1{ "userId": 1, "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto" }典型场景:GET 请求获取单条资源
POST https://jsonplaceholder.typicode.com/posts Content-Type: application/json {"title":"foo","body":"bar","userId":1}{ "title": "foo", "body": "bar", "userId": 1, "id": 101 }典型场景:POST 请求创建新资源
DELETE https://jsonplaceholder.typicode.com/posts/1{}典型场景:DELETE 请求删除资源,返回空对象
GET https://jsonplaceholder.typicode.com/posts/1/comments[ { "postId": 1, "id": 1, "name": "id labore ex et quam laborum", "email": "Eliseo@gardner.biz", "body": "laudantium enim quasi est quidem magnam voluptate ipsam eos\ntempora quo necessitatibus\ndolor quam autem quasi\nreiciendis et nam sapiente accusantium" }, ... ]边界 case:GET 请求返回数组,需处理多对象
PUT https://jsonplaceholder.typicode.com/posts/1 Content-Type: application/json {"id":1,"title":"updated title","body":"updated body","userId":1}{ "id": 1, "title": "updated title", "body": "updated body", "userId": 1 }边界 case:PUT 请求完整替换资源
PATCH https://jsonplaceholder.typicode.com/posts/1 Content-Type: application/json {"title":"patched title"}{ "userId": 1, "id": 1, "title": "patched title", "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto" }边界 case:PATCH 请求部分更新,仅修改 title
GET https://jsonplaceholder.typicode.com/nonexistent{ "error": "Not Found" }易错 case:请求不存在的路径,返回 404
POST https://jsonplaceholder.typicode.com/posts Content-Type: application/xml <post><title>foo</title><body>bar</body><userId>1</userId></post>{ "title": "foo", "body": "bar", "userId": 1, "id": 101 }易错 case:发送 XML 格式,API 仍返回 JSON

常见错误对照10 个常踩的坑 · 错误 → 修复

1. GET 请求带了请求体

错误
curl -X GET -d '{"key":"value"}' https://api.example.com/resource
修复
curl -X GET https://api.example.com/resource?key=value

HTTP 规范允许 GET 带 body,但大多数服务器/代理会忽略或拒绝;参数应放 query string 或 path

2. POST 请求忘记设置 Content-Type

错误
curl -X POST -d 'name=test&age=18' https://api.example.com/user
修复
curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' -d 'name=test&age=18' https://api.example.com/user

不指定 Content-Type,服务器可能无法正确解析 body;JSON 请求必须用 application/json

3. JSON body 里用了单引号

错误
{"name": 'test'}
修复
{"name": "test"}

JSON 标准(RFC 8259)强制双引号;单引号是 JS 对象字面量语法,JSON.parse 会报错

4. URL 参数里的特殊字符未编码

错误
https://api.example.com/search?q=hello world
修复
https://api.example.com/search?q=hello%20world

空格、中文、&、= 等字符在 URL 中有特殊含义,必须用 encodeURIComponent 或工具自动编码

5. Bearer Token 拼写错误或格式不对

错误
Authorization: Bearer token123
修复
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

Bearer 后需空格 + 完整 token;常见错误:写成 'Bearer:'、'bearer'、或只传 token 值

6. PUT 请求忘记传完整资源

错误
PUT /api/user/1 -d '{"name":"new"}'
修复
PUT /api/user/1 -d '{"name":"new", "email":"old@example.com"}'

PUT 是幂等替换,通常需传完整资源字段;只传部分字段可能导致其他字段被清空。PATCH 才适合部分更新

7. DELETE 请求带了请求体

错误
curl -X DELETE -d '{"reason":"test"}' https://api.example.com/resource/1
修复
curl -X DELETE https://api.example.com/resource/1

多数 REST API 的 DELETE 不接受 body,参数通过 URL 路径或 query string 传递;body 会被忽略或报 400

8. 分页参数用错了偏移量

错误
?page=1&size=10 返回第 2 页时用 ?page=2&size=10
修复
?page=1&size=10 → 返回后检查响应中 totalPages,下一页用 ?page=2&size=10

部分 API 的 page 从 0 开始(?page=0 为第一页),或使用 offset/limit 而非 page/size;需先确认 API 文档

9. 误把 POST 当 GET 用查询参数传 body

错误
POST /api/search?q=test&limit=10
修复
POST /api/search -H 'Content-Type: application/json' -d '{"q":"test","limit":10}'

POST 的 body 应放在请求体中而非 URL;URL 参数用于 GET 或标识资源,POST body 用于传递操作数据

10. 忽略响应中的 HTTP 状态码含义

错误
收到 201 Created 后以为请求失败,继续重试
修复
201 = 创建成功;200 = 成功;204 = 成功无内容;4xx = 客户端错误;5xx = 服务端错误

很多新手只看响应体是否有 error 字段,忽略状态码;201 表示资源已创建,不应再发相同请求

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

HTTP 请求 = Method + URL + Headers + Body

变量说明

  • Method — 请求方法(GET/POST/PUT/DELETE 等)
  • URL — 请求的目标资源地址
  • Headers — 请求头(Content-Type/Authorization 等)
  • Body — 请求体(JSON/Form/Text/Binary 等)

示例

测试一个 POST 请求:Method=POST,URL=https://api.example.com/users,Headers={Content-Type: application/json, Authorization: Bearer token123},Body={"name":"张三","email":"zhang@example.com"}。点击发送后,服务器返回 201 Created 及新用户 JSON 数据。

适用范围

适用于所有基于 HTTP/HTTPS 协议的 RESTful API 测试场景。不适用于 WebSocket/gRPC 等非 HTTP 协议,也不适用于需要客户端证书的 mTLS 接口。基于 RFC 7231 HTTP/1.1 标准。

原理图

用户输入URL / Method / Headers / Body构建 HTTP 请求浏览器 Fetch API发送 & 接收跨域 / 同域请求展示结果状态码 / 响应头 / 响应体(JSON / XML / HTML / 文本)
用户输入 本地处理(浏览器内) 网络请求 输出结果

开发者集成

3 种主流语言 · 复制即用

import requests

# 发送 GET 请求并打印状态码与响应体
url = "https://api.github.com/users/octocat"
resp = requests.get(url, timeout=10)
print(resp.status_code)          # 200
print(resp.json().get("login"))  # octocat

# 发送 POST 请求(JSON 体)
post_url = "https://httpbin.org/post"
payload = {"name": "test", "value": 42}
resp = requests.post(post_url, json=payload, timeout=10)
print(resp.status_code)          # 200
print(resp.json()["json"])       # {'name': 'test', 'value': 42}
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"time"
)

func main() {
	// GET 请求
	resp, _ := http.Get("https://api.github.com/users/octocat")
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(resp.StatusCode) // 200
	fmt.Println(string(body))    // 完整 JSON

	// POST 请求
	payload, _ := json.Marshal(map[string]any{"name": "test", "value": 42})
	resp, _ = http.Post("https://httpbin.org/post", "application/json", bytes.NewReader(payload))
	defer resp.Body.Close()
	body, _ = io.ReadAll(resp.Body)
	fmt.Println(string(body))    // 包含 json 字段的响应
	_ = time.Second              // 占位,避免 unused import
}
// 使用 fetch(Node 18+ 或浏览器)
const url = 'https://api.github.com/users/octocat';

// GET 请求
fetch(url)
  .then(res => {
    console.log(res.status); // 200
    return res.json();
  })
  .then(data => console.log(data.login)); // octocat

// POST 请求(async/await 风格)
(async () => {
  const resp = await fetch('https://httpbin.org/post', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ name: 'test', value: 42 })
  });
  const json = await resp.json();
  console.log(json.json); // { name: 'test', value: 42 }
})();

常见问题

8 个高频疑问

这个在线 API 测试工具和 Postman 有什么区别?
Postman 是桌面客户端,功能全但安装重、启动慢,团队协作和脚本测试强。这个工具完全在浏览器里运行,无需安装,打开即用,适合快速测试单个接口、调试参数或演示给同事看。它支持 GET/POST/PUT/DELETE 等常用 Method,可以自定义 Headers 和 Body(JSON/Form/Text),但不像 Postman 那样支持环境变量、Collection Runner 或 Pre-request Script。如果只是临时测个接口或不想装软件,这个工具更方便。
为什么我发送 POST 请求后,服务器一直返回 400 Bad Request?
400 通常表示请求格式服务器不认。检查三处:1) Content-Type 是否匹配 Body 格式——如果 Body 是 JSON,Header 必须设 Content-Type: application/json;如果是 Form,则用 application/x-www-form-urlencoded。2) Body 本身是否是合法 JSON(工具不会自动校验,可以复制到 JSON 验证器检查)。3) 某些接口要求特定 Header(如 Authorization、X-API-Key),确认已添加。工具在 Headers 区会显示常用预设,但不会自动补全业务 Header。
工具支持发送文件或者二进制数据吗?
不支持。这个工具是纯前端实现(FE),Body 只支持文本类型:application/json、application/x-www-form-urlencoded、multipart/form-data(文本字段)和纯文本。如果需要上传文件(图片、PDF 等),建议使用 Postman 或 curl。如果一定要测文件上传接口,可以先用 Base64 编码文件内容,粘贴到 JSON Body 的对应字段里,但注意请求体大小有限制(一般浏览器对单次请求 Body 限制约 2MB)。
工具会不会把我的 API 请求参数泄漏出去?安全吗?
安全。所有请求都由你的浏览器直接发出,工具本身不存储、不转发任何数据。代码完全在浏览器端运行(FE 实现),没有后端服务器接收你的请求参数。可以打开浏览器开发者工具的 Network 面板确认:点击「发送」后,网络请求的目标地址是你填的 URL,不是工具的服务器。关闭页面后,历史记录和输入内容立即从内存清除。如果仍有顾虑,可以断网后使用——工具在离线状态下依然正常工作(不依赖 CDN 资源)。
为什么我输入了正确的 URL 和参数,但请求一直 pending(挂起)直到超时?
常见原因:1) 目标服务器不支持跨域请求(CORS),浏览器会阻止响应返回——检查浏览器控制台是否有 CORS 错误提示,如果是,只能换服务端工具或让后端加 Access-Control-Allow-Origin。2) 目标服务器地址是内网 IP(如 192.168.x.x)或 localhost,部分浏览器会限制从 HTTPS 页面发往 HTTP 内网的请求。3) 目标服务器防火墙或网络不通——可以用 curl 或 Postman 从本机测一下确认。工具本身不设超时限制,但浏览器默认会在大约 2-5 分钟后超时。
工具支持 HTTPS 和自定义端口(如 8080、3000)的接口吗?
支持。URL 输入框接受完整地址,包括协议(http/https)、端口号和路径,例如 https://api.example.com:8080/v1/users。注意:如果目标接口是 HTTPS 但证书过期或自签名,浏览器会拦截并报 NET::ERR_CERT_AUTHORITY_INVALID,此时工具无法绕过——需要手动在浏览器中先访问该地址并「接受风险」,再回来使用工具。HTTP 接口没有此限制,但现代浏览器会标记为「不安全」。
为什么返回的 JSON 数据在工具里显示成一行,很难看?
工具默认不自动格式化响应体。如果返回的是 JSON,可以在响应区找到「格式化」按钮(通常是一个 {} 图标),点击后自动对 JSON 做缩进和换行,方便查看结构。如果返回的是 XML 或 HTML,工具不会做美化,建议复制到专门的格式化工具中查看。另外,工具不会对响应体大小设限,但如果返回数据超过 1MB,浏览器渲染可能会卡顿,此时建议在响应区直接复制原始文本。
发送请求后,工具显示「Failed to fetch」,是什么原因?
这是浏览器抛出的网络错误,常见原因:1) 目标 URL 拼写错误(比如漏了 https:// 或路径写错)。2) 目标服务器不可达(服务器宕机、DNS 解析失败、网络不通)。3) CORS 策略阻止——目标服务器没有在响应头里设置 Access-Control-Allow-Origin: * 或你的域名。4) 混合内容限制——如果工具页面是 HTTPS,但请求目标是 HTTP,浏览器会拦截。可以检查浏览器控制台的错误信息确认具体原因。如果目标接口是公共 API,先用 curl 或 Postman 确认它本身能正常工作。
选择 打开 +新窗口 esc关闭