用 fetch 搭建最小可用调试沙箱:封装 async runrequest(),动态设置 content-type 与 headers,用 response.clone() 安全解析响应,按 content-type 分流处理 json/text/二进制,添加状态行与 curl 复制功能,本地调试绕过 cors 用插件或浏览器参数。

用 fetch 搭个最小可用调试沙箱,别碰 XMLHttpRequest
现代浏览器里直接写 API 调试界面,fetch 是唯一靠谱选择。它天然支持 async/await、能传 AbortSignal 控制超时,还自动处理 JSON 解析(配合 .json())。老式 XMLHttpRequest 会卡死 UI、错误堆栈难读,现在连 Chrome DevTools 都不鼓励用了。
常见错误:直接在表单 onsubmit 里写 fetch 却没 event.preventDefault(),结果页面刷新,请求看似“发了”实则被中断。
- 把请求逻辑包进
async function runRequest() { ... },按钮绑定onclick="runRequest()" - URL、method、body 全部从表单
input和select实时取值,别硬编码 - 响应体统一用
response.clone().json().catch(() => response.text())处理——避免因非 JSON 响应导致解析报错
HTTP 头字段怎么填才不被服务端拒收
不是所有 API 都接受裸请求。Content-Type 错一个字符(比如写成 "application/json; charset=utf-8" 而服务端只认 "application/json"),就可能返回 415 Unsupported Media Type;Authorization 少个空格("Bearerxxx" 而非 "Bearer xxx"),直接 401。
真实场景中,POST /login 往往要 Content-Type: application/x-www-form-urlencoded,但很多人下意识全塞 application/json,后端解析失败却报 400 Bad Request,根本看不出是头的问题。
- 默认加
Accept: application/json, text/plain, */*,防止服务端因 Accept 不匹配返回406 -
Content-Type根据请求体类型动态切换:JSON.stringify(...)→"application/json",new URLSearchParams(...)→"application/x-www-form-urlencoded" - 手动输入 Header 时,键名首字母大写(
"Authorization"),值前后去空格——DOM 表单值自带空格很常见
响应展示区必须处理三类边界情况
调试沙箱最常崩在响应展示环节:空响应、二进制流、超长文本。直接 JSON.stringify(res) 会炸掉 undefined 或 function 字段;把图片响应当字符串渲染,页面直接显示乱码;响应体几 MB,textContent 更新卡死整个 tab。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
典型错误:用 pre.innerHTML = JSON.stringify(data, null, 2) 渲染一切,遇到 Response.body 是 ReadableStream 时直接报 TypeError: Converting circular structure to JSON。
- 先判断
response.headers.get("content-type"):含"json"才走.json(),含"text"才走.text(),否则用.arrayBuffer()+new Blob()构造下载链接 - JSON 渲染前加
try/catch,失败则 fallback 到原始文本;文本过长(>10000 字符)截断并加「展开」按钮 - 状态行单独拎出来:
<strong>HTTP ${response.status} ${response.statusText}</strong>,比藏在 JSON 里更直观
本地开发时跨域问题绕不开,但别真配 CORS
前端沙箱跑在 file:// 或 http://localhost:5173,调用 https://api.example.com 必然触发跨域。这时候开代理或求后端配 Access-Control-Allow-Origin: * 是错路——沙箱本就不该依赖后端配合。
真正可行的只有两条:用浏览器插件临时关 CORS(如 Moesif Origin Cors Changer),或改用 curl 命令生成请求再粘贴响应。前者适合快速验证,后者适合复现生产环境问题。
- Chrome 启动时加
--user-data-dir=/tmp/chrome-cors --disable-web-security可临时关闭安全策略(仅限本地调试,勿用于日常浏览) - 沙箱界面上加个「复制为 curl」按钮,生成类似
curl -X POST https://api.example.com/v1/test -H "Authorization: Bearer abc" -d '{"id":1}'的命令,用户可直接终端执行 - 绝对不要在沙箱代码里写
mode: "no-cors"——它会让响应变成 opaque,你啥都看不到
最麻烦的其实是重定向链和 cookie 状态:沙箱默认不带 credentials: "include",登录态无法透传;而开了之后,服务端又得配 Access-Control-Allow-Credentials: true,形成死循环。这种时候,老老实实切到 Postman 或 curl 更省时间。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










