hCaptcha · 在线演示

hCaptcha 演示

“我是人类”复选框,必要时以图片挑战作为后备。

Windows x64·本地运行,验证码不会离开你的电脑
  • 免费,无需注册
  • 真实提供商的小组件
  • 查看验证响应
每月 hCaptcha token 数量40,000
40.0k250.0k
别家按次收费,每 1,000 次约 $2.99$119.60
CapSkip Bronze,统一定价$35.00
$84.60留在你的口袋里按当前用量,每月如此

实时 hCaptcha 小组件

勾选“我是人类”复选框,如果弹出图片挑战就完成它。hCaptcha 一返回 token 就会完成验证。

Time to solve 0.0s
Solve cost $0 with CapSkip

如何识别 hCaptcha

上方的方框是一个实时的 hCaptcha 复选框。本页面展示两种方式来识别 hCaptcha 并获取有效的 h-captcha-response token:通过在你自己的代码中调用 CapSkip HTTP API,或将你的工具已经调用的验证码服务重新路由到 CapSkip。CapSkip 是一款无限量的 hCaptcha 识别工具,在你的设备上本地运行,因此没有按次费用,也没有任何数据离开你的机器。

面向开发者

方式一:使用 CapSkip HTTP API 识别 hCaptcha

在构建自动化、爬虫或机器人?只需一个请求,把本页面的 site key 和 URL 发送给 CapSkip 应用,轮询结果,CapSkip 就会返回一个全新的 hCaptcha token,你可以像真实 token 一样提交它。该 API 使用标准的 in.php / res.php 端点,因此可以在 Python, Node.js, PHP, C# 或任何能发起 HTTP 调用的其他语言中使用。

网站密钥(Site key)
10000000-ffff-ffff-ffff-000000000001
页面 URL
https://capskip.com/zh/captcha-demo/hcaptcha/

开始之前

CapSkip 在本地识别。下载并运行 CapSkip 桌面应用 并让它在后台保持打开。你的代码通过 127.0.0.1:8080与它通信,因此没有云端调用,也没有按次费用。

1

将 hCaptcha 发送到 CapSkip

提交本页面的 sitekey 和 pageurl 设置为 in.php 连同 method=hcaptcha。CapSkip 会立即返回一个任务 ID。

import time
import requests

API = "http://127.0.0.1:8080"   # the CapSkip app on your machine
KEY = "YOUR_API_KEY"

# 1. Submit the hCaptcha shown on this page
task = requests.post(f"{API}/in.php", data={
    "key": KEY,
    "method": "hcaptcha",
    "sitekey": "10000000-ffff-ffff-ffff-000000000001",
    "pageurl": "https://capskip.com/zh/captcha-demo/hcaptcha/",
    "json": 1,
}).json()["request"]

# 2. Poll until the token is ready
while True:
    time.sleep(5)
    res = requests.get(f"{API}/res.php", params={
        "key": KEY, "action": "get", "id": task, "json": 1,
    }).json()
    if res["request"] != "CAPCHA_NOT_READY":
        break

token = res["request"]   # the h-captcha-response token
print(token)
const API = 'http://127.0.0.1:8080'; // the CapSkip app on your machine
const KEY = 'YOUR_API_KEY';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));

(async () => {
  // 1. Submit the hCaptcha shown on this page
  const submit = await fetch(`${API}/in.php`, {
    method: 'POST',
    body: new URLSearchParams({
      key: KEY,
      method: 'hcaptcha',
      sitekey: '10000000-ffff-ffff-ffff-000000000001',
      pageurl: 'https://capskip.com/zh/captcha-demo/hcaptcha/',
      json: '1',
    }),
  }).then((r) => r.json());

  // 2. Poll until the token is ready
  let res;
  do {
    await sleep(5000);
    res = await fetch(`${API}/res.php?key=${KEY}&action=get&id=${submit.request}&json=1`)
      .then((r) => r.json());
  } while (res.request === 'CAPCHA_NOT_READY');

  const token = res.request; // the h-captcha-response token
  console.log(token);
})();
<?php
$api = 'http://127.0.0.1:8080'; // the CapSkip app on your machine
$key = 'YOUR_API_KEY';

// 1. Submit the hCaptcha shown on this page
$ch = curl_init("$api/in.php");
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS     => http_build_query([
        'key'     => $key,
        'method'  => 'hcaptcha',
        'sitekey' => '10000000-ffff-ffff-ffff-000000000001',
        'pageurl' => 'https://capskip.com/zh/captcha-demo/hcaptcha/',
        'json'    => 1,
    ]),
]);
$task = json_decode(curl_exec($ch), true)['request'];

// 2. Poll until the token is ready
do {
    sleep(5);
    $res = json_decode(file_get_contents(
        "$api/res.php?key=$key&action=get&id=$task&json=1"
    ), true);
} while ($res['request'] === 'CAPCHA_NOT_READY');

$token = $res['request']; // the h-captcha-response token
echo $token;
using System.Text.Json;

const string Api = "http://127.0.0.1:8080"; // the CapSkip app on your machine
const string Key = "YOUR_API_KEY";
var http = new HttpClient();

// 1. Submit the hCaptcha shown on this page
var submit = await http.PostAsync($"{Api}/in.php", new FormUrlEncodedContent(new Dictionary<string, string>
{
    ["key"] = Key,
    ["method"] = "hcaptcha",
    ["sitekey"] = "10000000-ffff-ffff-ffff-000000000001",
    ["pageurl"] = "https://capskip.com/zh/captcha-demo/hcaptcha/",
    ["json"] = "1",
}));
string task = JsonDocument.Parse(await submit.Content.ReadAsStringAsync())
    .RootElement.GetProperty("request").GetString()!;

// 2. Poll until the token is ready
string token;
do
{
    await Task.Delay(5000);
    var res = JsonDocument.Parse(await http.GetStringAsync(
        $"{Api}/res.php?key={Key}&action=get&id={task}&json=1"));
    token = res.RootElement.GetProperty("request").GetString()!;
} while (token == "CAPCHA_NOT_READY");

Console.WriteLine(token); // the h-captcha-response token

你会得到一个很长的 token,通常以下列前缀开头: P1_,它对该 site key 有效,可直接提交。同一响应中还带有 respKey 和 useragent (即完成识别的浏览器的用户代理)。

2

使用 token

将 token 放入小组件隐藏的 h-captcha-response 文本框中。hCaptcha 还会填充一个 g-recaptcha-response 文本框,供读取该字段的站点使用,因此两者都要设置。如果小组件在渲染时带有 data-callback,则用该 token 运行该函数。然后提交表单,你的服务器会通过 hCaptcha siteverify 进行验证。请注意,本演示通过小组件自身的回调进行验证,因此它检查的是小组件生成的 token,而不是你放入字段中的 token。

// 1. Drop the solved token into both response fields
document.querySelector('[name="h-captcha-response"]').value = token;
document.querySelector('[name="g-recaptcha-response"]').value = token;

// 2. If the widget has a data-callback, run it with the token
const cb = document.querySelector('.h-captcha')?.dataset.callback;
if (cb && window[cb]) window[cb](token);

// 3. ...then submit your form.
高级

隐形 hCaptcha 与 hCaptcha Enterprise

隐形小组件没有复选框,只有在站点调用 hcaptcha.execute()时才会弹出;请在请求中添加 invisible=1 。Enterprise 站点通常会向小组件传递一个 rqdata 值;请将其作为 data发送。当站点会检查浏览器时,请用 CapSkip 返回的完全相同的 useragent 提交 token。

POST http://127.0.0.1:8080/in.php
     key=YOUR_API_KEY
     method=hcaptcha
     sitekey=SITEKEY_FROM_THE_PAGE
     pageurl=https://the-protected-site.com/login
     invisible=1
     data=RQDATA_FROM_THE_PAGE
     json=1

GET  http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=2122988149&json=1
     {"status":1,"request":"P1_eyJ0eXAiOiJKV1Qi…","respKey":"E0_eyJ0eXAi…","useragent":"Mozilla/5.0 …"}

该 API 还接受 proxy 和 proxytype,这在站点检查 token 是否从你自己的 IP 生成时很有用。Anti-Captcha 风格的客户端可以通过 createTask 发送同一任务,类型为 HCaptchaTaskProxyless, HCaptchaTask 或 HCaptchaEnterpriseTask.

完整的请求参数、响应字段和错误代码列表见 CapSkip API 文档.

无需改动代码

方式二:将你现有的识别服务代码发送到 CapSkip

已经在用 hCaptcha 时通过按次付费的验证码服务(例如 2Captcha, Anti-Captcha 或 CapSolver)识别验证码?你无需重写一行代码。CapSkip 应用包含一个 服务模拟器 ,它在本地模拟这些服务自己的 API:选择你使用的服务,点击 添加到 hosts 文件,你的机器人、爬虫或现成工具已经发送给它的每个请求,都会由 CapSkip 在你自己的机器上响应,采用统一价格而非按次账单。

1

选择你的服务

打开 CapSkip 应用,选择你的代码已经在对接的服务:2Captcha、RuCaptcha、Anti-Captcha、CapMonster Cloud、CapSolver、DeathByCaptcha、SolveCaptcha、NextCaptcha、EzCaptcha 或 Captchas.io。

2

添加到 hosts 文件

在应用中一键将该服务的域名指向 CapSkip,于是你的工具发出的调用会在你自己的机器上得到响应,而不是发往付费 API。

3

原样运行你的工具

相同的 API key、相同的请求、相同的轮询循环。CapSkip 以该服务自身的格式回复,你的代码会得到一个有效的 h-captcha-response token。

切换后,下面的内容不会有任何变化。这与你的代码今天发出的调用完全相同,只不过现在 hCaptcha 在本地识别,并且一个有效的 h-captcha-response token 会从 CapSkip 返回:

POST https://2captcha.com/in.php
     key=YOUR_EXISTING_API_KEY
     method=hcaptcha
     sitekey=10000000-ffff-ffff-ffff-000000000001
     pageurl=https://capskip.com/zh/captcha-demo/hcaptcha/

GET  https://2captcha.com/res.php?key=YOUR_EXISTING_API_KEY&action=get&id=2122988149
     OK|P1_eyJ0eXAi…  the h-captcha-response token, solved by CapSkip

客户端库同样如此:Anti-Captcha 风格的 createTask / getTaskResult 配对,或任何基于这些服务构建的封装,在模拟器开启后都能继续工作。完整的请求和响应参考见 CapSkip API 文档.

关于本 hCaptcha 演示

本页是一个实时的 hCaptcha 演示 ,在这里你可以测试 hCaptcha 的工作原理,并实时观看它被识别的过程。hCaptcha 是一款注重隐私的验证码,许多网站用它来替代 reCAPTCHA:它会显示一个“我是人类”复选框,并在无法确定访问者身份时弹出图片挑战,例如在网格中选出匹配的图片。用它来探索 hCaptcha token 的生成、 h-captcha-response 值,以及网站用来保护表单、登录和注册免受垃圾信息、滥用和机器人侵害的验证流程。

开发者、测试人员和自动化工程师可以使用这个 hCaptcha 测试页面来检查集成、验证配置,并对 CapSkip 识别 hCaptcha 的速度进行基准测试。无论你需要识别一次 hCaptcha 还是自动化数千次识别,CapSkip 都有两种工作方式:可从任何语言调用的普通 HTTP API,以及对你今天可能按次付费的验证码服务的即插即用模拟,两者都以统一价格无限量识别。两者都由同一个桌面 AI 验证码识别工具驱动,安装一次即可在你自己的机器上运行,因此没有任何内容在远程服务器排队,也没有任何按次计费。

我可以保留现有的 2Captcha 或 Anti-Captcha 代码吗?
可以。CapSkip 应用模拟以下服务的 API: 2Captcha, RuCaptcha, Anti-Captcha, CapMonster Cloud, CapSolver, DeathByCaptcha, SolveCaptcha, NextCaptcha、EzCaptcha 和 Captchas.io。在应用中选择你的服务,点击“添加到 hosts 文件”,你的代码已经发送的 hCaptcha 请求就会由 CapSkip 在本地识别,无需改动代码,也无按次费用。
我如何识别 hCaptcha?
运行 CapSkip 桌面应用,将小组件的 sitekey 和页面 URL 以 method=hcaptcha 发送到它的 API,CapSkip 就会返回一个有效的 h-captcha-response token。将 token 放入 h-captcha-response 字段,如果小组件有回调就运行它,然后提交表单。
hCaptcha 可以被绕过吗?
可以。CapSkip 会在你自己机器上的真实浏览器中通过 hCaptcha 复选框及其图片挑战,然后向你提供一个可像真实访问者一样提交的 token。同样支持隐形小组件,以及传递 rqdata 的 Enterprise 站点。
如何区分 hCaptcha 和 reCAPTCHA?
查看小组件的标记。hCaptcha 渲染为一个带有 h-captcha 类的 div,其 data-sitekey 为 UUID 格式(带连字符),并从 js.hcaptcha.com 加载脚本。reCAPTCHA 使用 g-recaptcha 类,sitekey 以 6L 开头,脚本来自 google.com/recaptcha。两者都会填充 g-recaptcha-response 字段,因此仅凭该字段无法区分它们。
CapSkip 是免费的 hCaptcha 识别工具吗?
免费试用可让你完整使用三天并识别 500 次。付费授权以统一价格解锁无限量识别,无按验证码费用。
hCaptcha 的测试密钥有哪些?
hCaptcha 公开了一个测试 sitekey:10000000-ffff-ffff-ffff-000000000001,以及一个测试密钥(secret):0x0000000000000000000000000000000000000000。两者搭配使用时始终通过,小组件也会跳过图片挑战。测试 sitekey 会发放 token 10000000-aaaa-bbbb-cccc-000000000001。生产环境的密钥会拒绝该 token。本演示使用的正是这对测试密钥,因此复选框会立即通过,不会出现图片挑战。
为什么表单提示缺少 h-captcha-response 字段?
表单提交时没有携带 hCaptcha token。通常是因为小组件尚未完成验证、被放在了 form 元素之外,或者 token 在大约两分钟后已过期。请等待小组件的回调触发后再提交,并确保 h-captcha-response 文本框位于表单内部。
价格登录