全部文章

FourA 简报 (2026年6月5日至6月12日)

点击 Activity 中的任意行即可查看完整 payload,随后可在 Playground 中一键打开并自动填充。新增的蜜罐防护机制可捕获将 request 作为虚假 response 返回的 proxy。

亮点

现在点击 Activity 中的任意 request 即可查看完整 payload。再点击一次即可在 Playground 中重新打开,自动填充,随时可以重新运行。我们还捕获了一类将你发送的 request 作为虚假 response 返回的 “proxy”,并阻止了它们污染你的数据。

新增功能

Activity → Playground:重放任意 request

每个 API 调用都会返回 X-Foura-Request-Id header。相同的 id 会显示在 Activity 中该 request 的旁边。点击任意行即可获取完整 information:运行时间、发起调用的 key、request body、response、状态码以及耗时。点击 “Open in Playground”,该 request 就会加载到表单中并自动填充。

以前,重放意味着需要凭记忆重新构建 request。现在,Activity 会保存历史记录,而 Playground 就是你的重新运行按钮。

需要了解的几点机制:我们为每个 API key 保留最近 200 个 payload,有效期为 24 小时。之后,旧的条目会随着新条目的进入而被覆盖。当 payload 过期时,对话框会明确告知,而不是像以前那样显示令人困惑的 null 或 “(empty body)”。

你也可以关联 request id。在客户端将 X-Foura-Request-Id response header 与你自己的 request id 一起记录,之后只需一次粘贴即可轻松找到匹配的 Activity 行。

捕获过程不占用主路径,你的 API request 绝不会因此而等待。即使捕获存储服务不可用,调用仍会正常进行,对话框稍后只会显示 “no body captured”。

针对 response body 进行校验

Playground 的 Validate 部分新增了 body 内容规则。你可以设置 “仅在 response 包含 X 时成功” 或 “在包含 Y 时失败”,支持使用 | 分隔多个备选项。该功能适用于 Single 和 Proxy。当状态码无法真实反映实际情况时,这非常有用。

无 body 的 payload 明确说明原因

失败的 request 没有可显示的 response body。旧版对话框会将其渲染为 null 或 “(empty body)”,这很容易被误认为是真实的空 response。现在,对话框可以区分三种情况:request 失败(带有实际错误信息)、未捕获到 payload,或者服务器确实返回了零字节。

虽然是细节改动,但它消除了频繁出现的 “等等,这是真实的 response 还是 UI bug?” 的困惑。

Playground 中的重置按钮

一键将当前 endpoint 的表单恢复为默认设置。默认设置会保持 unblockertryJsonData 开启,因为这是 90% 场景下的常用路径。

底层原理

蜜罐 proxy 检测

市面上的一些 “proxy” 实际上并不进行转发。它们会将你发送的 request 作为纯文本服务器变量转储(HTTP 方法、headers、目标主机)返回,以便其运营者收集其中的任何内容。我们曾看到同一个 proxy 在同一个会话中,先转发了一个 request,接着返回了下一个 request 的镜像内容,然后对再下一个 request 返回了 502。

现在,在 response 离开我们的边缘节点之前,body 校验器就会识别出这种转储特征。Single 会返回真实的失败。Proxy Finder 会使用其他 proxy 进行重试。Browser 则从共享的 HTTP 层继承相同的防护机制。因此,你在 Activity 中看到的垃圾数据行会减少,你的爬虫也不会摄入那些看起来像数据、实际上却是探测信息的垃圾内容。

目前尚未调整信誉评级。该 proxy 暂时仍保留在池中。我们只是拒绝向你返回其虚假数据。

因此,如果某个 request 在 Activity 中被标记为明确的失败,而以前它看起来像是一个勉强的 “成功”,那就是防护机制在起作用。干净的失败总好过被污染的数据记录。