# Web Unlocker API — 从 403 到 200 | QuantumProxies.io

Web Unlocker API 与代理：住宅 IP、真实浏览器 TLS 指纹、每次被拒即换新出口、JavaScript 挑战交给真实浏览器。成功率与 p50 由我们自己的 canary 实测。

## 面向拒绝你的爬虫的页面的 Web Unlocker API

你发来 URL，我们带回那个回了 403 的页面：住宅 IP、真实浏览器的 TLS 指纹、每次被拒即换新出口、站点要求 JavaScript 时启用真实浏览器。响应里带有状态、尝试次数、耗时和费用，你永远知道发生了什么。

- **88.9%** 的调用返回了真实页面
- **4.1 s** 取回页面的中位耗时（p50）
- **27** 个受反爬虫保护的目标，各运行 3 轮

2026-11-11 由我们自己的 canary 实测：81 次调用中 72 次成功。验证码演示页会运行但不计入，因为交互式验证码不会被破解。

![QuantumProxies Web Unlocker：向 /api/v1/scraper/unlock 发送一次带 URL 和国家的 POST，请求从住宅 IP 以浏览器 TLS 指纹重放，真实浏览器待命，那个曾回 403 的页面以 200 OK 返回，并附带状态、blocked 标志、获胜层级和尝试日志。](https://quantumproxies.io/images/web-unlocker/web-unlocker-403-to-200.webp?v=20261104)

## 从 403 到 200，实测

### 你的客户端得到的

**403**

不是页面，而是 403、安全检查或 JavaScript 挑战，无论 IP 多干净、User-Agent 怎么设。

### Web Unlocker 在 2026-11-11 返回的

**200**

对 27 个受保护目标的 81 次调用中，88.9% 以真实页面返回：中位 4.1 秒，p95 28.8 秒。

这是我们自己的 canary，不是宣传册上的数字：同样的目标，各运行 3 轮。运行会重复，本页每个数字都从其文件重新生成。

### 按反爬虫系统划分的成功率

由 2026-11-11 的 canary 运行生成，对相同目标运行 3 轮。交互式验证码页面已排除。

| 反爬虫系统 | 成功率 | 中位耗时 | 调用数 |
| --- | --- | --- | --- |
| Cloudflare | 100% | 8.9 s | 9 |
| DataDome | 91.7% | 10.4 s | 12 |
| Akamai | 75% | 2.4 s | 12 |
| PerimeterX / HUMAN | 100% | 1.8 s | 9 |
| Kasada | 100% | 16.1 s | 6 |
| F5 BIG-IP | 100% | 3.4 s | 6 |
| Imperva | 83.3% | 7.4 s | 6 |
| AWS WAF | 66.7% | 14.3 s | 6 |
| Amazon | 66.7% | 4.1 s | 3 |
| Google | 66.7% | 7.5 s | 3 |
| Other sites | 100% | 2.0 s | 6 |
| Reddit | 100% | 1.7 s | 3 |

### 我们如何测量

这些数字来自我们自己的 canary，即在相同页面上反复进行的运行。客户流量从不计入其中。

- 一份固定的受保护页面清单，按其前面的防护系统分组。
- 对整份清单运行 3 轮。
- 只有以状态 200 返回真实页面的调用才算成功。
- 挑战页、空响应体和超时都算失败。
- 验证码演示页也会运行，但不计入统计。

**最近一次运行：2026-11-11。27 个页面，各运行 3 轮：81 次调用，72 次返回真实页面（88.9%）。**

- [下载本次运行的数据文件（JSON）](https://quantumproxies.io/data/unlocker-canary.json)
- [实时状态页](https://quantumproxies.io/web-unlocker/status)

## 你需要哪个产品

三个产品共用同一张住宅网络。该调用哪个，取决于目标站点对你的请求做了什么。

### Web Unlocker

页面以 403、安全检查或挑战拒绝你的客户端：一次调用带回真实响应，任意方法、你自己的头和正文、固定在同一出口的登录或购物车，按 GB 从预付余额计费。

### [住宅代理](https://quantumproxies.io/zh/residential-proxies)

你的客户端本就能通过，只是需要另一个 IP：以同样的用户名语法（国家、州、城市、会话）通过 HTTP 或 SOCKS5 使用住宅出口。

### [Extract API](https://quantumproxies.io/zh/extract-api)

你想要 Markdown、文本或 JSON 形式的页面，用不着原始响应、POST 或自己的 cookie jar。

## 用哪个端点

三扇门后是同一个引擎。按你的代码已经会说的方式来选；代码片段与仪表盘用你自己的凭据填充的完全相同。

### REST API

你可以改代码：一次 JSON 请求进，一次 JSON 响应出，无需安装证书。

`POST https://app.quantumproxies.io/api/v1/scraper/unlock`

```
curl -X POST https://app.quantumproxies.io/api/v1/scraper/unlock \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/", "country": "us"}'
```

### 代理（CONNECT）

你已有会说代理的爬虫：用 unlocker 的用户名和密码指向主机和端口，CA 只装一次。

`http://unlock.quantumproxies.io:9000`

```
# once: curl -o unlocker-ca.pem https://app.quantumproxies.io/api/v1/scraper/unlock/ca
curl --proxy http://unlock.quantumproxies.io:9000 \
  --proxy-user "USER:PASS" \
  --cacert unlocker-ca.pem \
  https://example.com/
```

### 直连模式

不装证书的代理：经代理把请求发到 http://unlock/，并在 x-qp-url 头里指明目标。

`http://unlock.quantumproxies.io:9000, then http://unlock/`

```
curl --proxy http://unlock.quantumproxies.io:9000 \
  --proxy-user "USER:PASS" \
  -H "x-qp-url: https://example.com/" \
  http://unlock/
```

## 浏览器操作、批量、缓存和现成的客户端

### 抓取前的浏览器操作

在 REST 调用中，你可以列出浏览器在抓取页面之前要做的事：点击、输入、滚动、等待。

### 最多 100 个 URL 的批量

一次批量最多发送 100 个 URL，完成后会收到 webhook。

### 有效期由你决定的缓存

页面在缓存中保留多久由你设置。在缓存有效期内，再次请求同一页面不产生费用。

### 两个可下载的客户端和一张迁移表

文档中有两个单文件客户端，分别用于 Node.js 和 Python，还有一张迁移表，供为其他 unlocker 编写的代码使用。

[打开 Web Unlocker 文档](https://quantumproxies.io/docs/#tag/Web-Unlocker)

## 视频：仪表盘中的 Web Unlocker

带你浏览仪表盘的 Web Unlocker 页面：购买 GB、选择接入方式并发送第一个请求。英文，附字幕。

## Web Unlocker 的工作方式

### 1 · 你的请求以浏览器的身份发出

客户端发送的身份头（User-Agent、Accept、Sec-Fetch-*）被替换为与真实浏览器 TLS 握手一致的一组。Authorization、cookie、content type 和自定义头原样通过。

### 2 · 被拒后换一个新的住宅出口重试

遇到挑战或 403 就在新出口以另一族指纹重试，最多三次 TLS 尝试，全部在同一个时间预算内：默认 60 秒，用 timeout_ms 最多 120 秒。

### 3 · 仍被拦？真实浏览器接手

当 TLS 层持续被挑战时，真实浏览器打开页面并应答 JavaScript 挑战。使用粘性会话时，取得的 clearance 会被保留，并在你对该站点的后续请求中重放。

Web Unlocker API 面向普通 HTTP 客户端拿不到的页面：反爬虫层在读到任何一个头之前就先给 TLS 握手和 HTTP/2 设置打分的那些页面。fetch 或 requests 调用无论设置什么 User-Agent，都带着运行时的签名。unlocker 在传输层修正它，源站拒绝时换新的住宅出口重试，需要 JavaScript 时打开真实浏览器，并交回源站的原始响应：任意方法、你自己的头和正文、固定在同一出口 IP 上的登录或购物车。

## web unlocker 能做而代理做不到的事

轮换住宅代理改变的是请求从哪里来，改变不了请求长什么样：TLS 握手、HTTP/2 帧顺序和头集合仍然在说 Python 或 Node，而现代反爬墙打分的正是这些。web unlocker 把请求改写成真实浏览器会发出的样子，源站拒绝时换另一个指纹重试，源站要求 JavaScript 时切换到真实浏览器。你保留代理接口，unlocker 加上判断力。

## 真实浏览器的 TLS 指纹

每次尝试都以真实浏览器的 TLS 配置文件发出，身份头也改写得与之匹配，因为带着 Firefox User-Agent 的 Chrome 握手比两者单独任何一个都更显眼。站点期待特定配置时可以固定（Chrome、Firefox、Safari、Safari iOS、Edge、Brave，REST 端点还有移动版 Safari）；不固定时重试在 Chrome、Firefox 和 Brave 之间轮换，烧掉一个握手的站点会遇到另一个。Authorization、Cookie、Content-Type 和自定义 X-* 头原样转发，重放抓取到的 App 请求时 keepHeaders 会原封不动发送你的头。

## 模式、格式与时间预算

默认的 mode auto 逐级爬梯：先走 TLS 层，被拒就换新出口，站点持续挑战时请出浏览器。mode tls 从不打开浏览器；mode browser 一开始就在浏览器里。format 以 html、markdown 或 text 返回正文，render png 则截图。整次调用含重试与渲染都落在一个预算内：默认 60 秒，用 timeout_ms 最多 120 秒；max_bytes 给单次调用可移动的流量封顶。响应会说明哪一层获胜（tier_served），逐条列出每次尝试的层级、配置、出口国家、结果、毫秒和字节（attempt_log），并按你所在层级的单价给出字节和美元费用。

## 拦截会被如实报告，绝不伪装成成功

每个响应在到达你之前都会被分类。分类器读取反爬系统在页面上留下的签名，同时指出系统（Cloudflare、DataDome、Akamai、PerimeterX 等）和拦截类别：js_challenge、captcha、access_denied、rate_limited、fingerprint、geo 或 timeout。在 REST 端点，仍被拦截的页面以 200 返回并把 blocked 置为 true、附上页面本身供检查；设置了 fail_on_block 则返回 424 target_blocked。在正向代理上，源站状态连同 x-qp-unlocker-blocked 头一起转发。交互式验证码不会被破解：它们以 captcha 标记返回。

## 会话、地理定向与按站点记忆

传入国家，以及网络覆盖的州或城市，就从该市场出口。留空时出口国家先取自目标的顶级域名，再取自你账户所在国家，美国只是最后的兜底。粘性会话 id 在 3 到 1,440 分钟内让多次调用保持同一出口 IP，登录、购物车或分页列表因此停留在同一身份上。unlocker 还会按域名记住最近哪一层和哪一族指纹通过了，下次从那里开始，并把站点刚拒绝的出口隔离，不再向该站点提供。

## Premium 与 Mobile 层级，按 GB 预付

Web Unlocker 运行在两个出口池上：住宅 IP 的 Premium 和 4G/5G 运营商 IP 的 Mobile，各自拥有独立的预付 GB 余额，在仪表盘从 1 GB 起用银行卡、PayPal、加密货币或账户余额购买。用量按移动的字节计量，含重试与浏览器渲染；余额用尽时返回带充值链接的 402，而不是静默失败。各层级的每 GB 价格显示在仪表盘的 Web Unlocker 页面购买按钮旁。没有订阅，没有最短期限。

## 一份错误目录，并告诉你下一步

REST 与代理共用一份目录。每个错误都给出代码，并说明是否值得重试、是否已计费以及下一步怎么做：带购买链接的 no_credit（402）、带拦截类别和尝试日志的 target_blocked（424）、rate_limited（429，按量付费为每分钟 20 次、并发 10 个，带 Retry-After）、render_failed 与 upstream_failed（503）、timeout_ms 耗尽时的 timeout（504）。带有真实页面的 403 或 429 不算拦截，会原样返回。

## 常见问题

### 什么是 web unlocker？

web unlocker 是把一个普通 HTTP 请求像真实浏览器那样送达反爬虫保护站点的服务：从住宅 IP 出发，带浏览器 TLS 指纹和匹配的头，被拒时换新 IP 重试，遇 JavaScript 挑战时打开真实浏览器。它返回源站的原始响应，附带尝试次数和费用。

### web unlocker 和住宅代理有什么不同？

代理只改变源 IP。你客户端的 TLS 握手和头集合仍会暴露自动化工具，而这正是现代反爬墙打分的依据。unlocker 把请求改写成浏览器的样子，被拒时换另一个指纹重试，需要 JavaScript 时升级到真实浏览器。如果你的客户端本就能通过，住宅代理才是正确的选择。

### Web Unlocker 能破解验证码吗？

它用真实浏览器应答 JavaScript 挑战，并在粘性会话内保留 clearance cookie 供对该站点的后续请求使用。需要真人的交互式验证码，如 hCaptcha、reCAPTCHA 或点击勾选框，不会被破解：响应以 captcha 标记返回并注明厂商，移动的流量按 GB 计费，除非仪表盘另有说明。

### Web Unlocker 有免费试用吗？

创建账户免费，一分钟即可，仪表盘的 Web Unlocker 页面有一个 Test a URL 框，显示一次调用的状态、尝试次数、耗时和费用。unlocker 的 GB 按层级从 1 GB 起预付，前几次测试调用的费用写在框旁边。免费住宅试用针对普通住宅代理，不包括 unlocker。

### 可以用 Python、Node.js、PHP、Go 或 curl 调用吗？

可以。REST 端点是任何语言都会的普通 HTTPS POST；上方标签页里的 curl、Python、Node.js、PHP 和 Go 片段与仪表盘用你的凭据填充的完全相同。Scrapy、Playwright 或任何带代理设置的客户端使用 CONNECT 代理，无法安装证书的环境则用直连模式。

### Web Unlocker 是代理还是 API？

两者皆是，同一个账户、同一份余额。能改代码就用 REST：JSON 进、JSON 出，无需证书。爬虫已会说代理就用代理：主机、端口、用户名和密码，CA 装一次。想要不装证书的代理就用直连模式：把请求发到 http://unlock/，并在 x-qp-url 里指明目标。

### 如果所有尝试后页面仍被拦截会怎样，我要付费吗？

它绝不会被当作静默成功返回。REST 端点把 blocked 置为 true，并在页面旁注明拦截类别和厂商；设置了 fail_on_block 则返回 424 target_blocked。代理连同 x-qp-unlocker-blocked 转发源站状态。移动的字节按 GB 计费，除非仪表盘另有说明，尝试日志会显示这些字节换来了什么。

### 能在多个请求之间保持同一个 IP 吗？

能。在请求正文或代理用户名里传入会话 id，带该 id 的每次调用都会在 3 到 1,440 分钟内从同一出口 IP 发出。登录、购物车或分页列表就是这样停留在同一身份上，而不是每页换一个 IP。

### 可以从哪些国家出口？

传入 country，以及网络覆盖的 state 或 city，Premium 层级就从该市场的住宅 IP 出口；Mobile 层级在 4G/5G 运营商 IP 上同样如此。留空时出口按目标的顶级域名选择，其次是你账户所在国家，美国作为最后兜底。

### 需要安装证书吗？

只有经 CONNECT 代理走 HTTPS 时才需要，因为它要终止 TLS 来改写请求：用你的密钥从 API 下载一次 CA 即可。目标放在 x-qp-url 头里的直连模式和 REST 端点完全不需要证书。

### 它能在抓取页面之前点击、输入或滚动吗？

可以，在 REST 调用中。添加一份浏览器操作列表（点击、输入、滚动、等待），浏览器会在抓取页面之前按顺序执行。

### 我可以一次发送很多 URL 吗？

可以。一次批量调用最多接受 100 个 URL，完成后会通过 webhook 通知你。

### 同一个页面请求两次，要付两次费吗？

页面在缓存中时不用。缓存有效期由你在调用中设定：到期之前，同一页面由缓存返回，不产生费用。

### Web Unlocker 多少钱？

按移动的 GB 计费，从你在仪表盘为所用层级购买的预付余额扣除，住宅出口的 Premium 或运营商出口的 Mobile，从 1 GB 起。重试和浏览器渲染都计入。当前每 GB 价格在购买前显示于仪表盘的 Web Unlocker 页面；没有订阅，没有最短期限。

## 相关产品

- [住宅 Web Unlocker](https://quantumproxies.io/web-unlocker/residential)
- [基于 4G/5G IP 的移动 Web Unlocker](https://quantumproxies.io/web-unlocker/mobile)
- [Web Unlocker 状态与实测成功率](https://quantumproxies.io/web-unlocker/status)
- [适用于 Cloudflare 的 Web Unlocker](https://quantumproxies.io/web-unlocker/cloudflare)
- [适用于 DataDome 的 Web Unlocker](https://quantumproxies.io/web-unlocker/datadome)
- [适用于 Akamai Bot Manager 的 Web Unlocker](https://quantumproxies.io/web-unlocker/akamai)
- [适用于 PerimeterX (HUMAN) 的 Web Unlocker](https://quantumproxies.io/web-unlocker/perimeterx)
- [适用于 Kasada 的 Web Unlocker](https://quantumproxies.io/web-unlocker/kasada)
- [适用于 Imperva (Incapsula) 的 Web Unlocker](https://quantumproxies.io/web-unlocker/imperva)
- [适用于 F5 (BIG-IP, Shape) 的 Web Unlocker](https://quantumproxies.io/web-unlocker/f5)
- [适用于 AWS WAF 的 Web Unlocker](https://quantumproxies.io/web-unlocker/aws-waf)
- [Extract API：任意页面转为 Markdown、HTML 或 JSON](https://quantumproxies.io/zh/extract-api)
- [SERP API：结构化 JSON 形式的搜索结果](https://quantumproxies.io/zh/serp-api)
- [Residential Premium 住宅代理](https://quantumproxies.io/zh/residential-proxies)
- [基于 4G/5G 运营商 IP 的移动代理](https://quantumproxies.io/zh/mobile-proxies)
- [REST API 参考](https://quantumproxies.io/zh/api)
- [面向 AI 智能体的 MCP 服务器](https://quantumproxies.io/zh/mcp-server)

## Sources

- [RFC 9110: HTTP Semantics — safe and idempotent methods](https://www.rfc-editor.org/rfc/rfc9110.html#name-safe-methods)
- [RFC 9110: The CONNECT method](https://www.rfc-editor.org/rfc/rfc9110.html#name-connect)
- [RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3](https://www.rfc-editor.org/rfc/rfc8446.html)
- [Proxy-Authorization header (MDN Web Docs)](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Proxy-Authorization)
- [JA3: a method for profiling SSL/TLS clients (Salesforce, GitHub)](https://github.com/salesforce/ja3)
