Tiktok 验证码
概述
TikTok 验证码是 TikTok 使用的身份验证系统,用于保护平台免受机器人和垃圾邮件的侵害。此验证码通常在注册新账户、登录或出现异常活动时出现。
🎵
目前已有适用于浏览器上所有 4 种验证码类型的扩展,请私信管理员获取扩展。为浏览器、模拟器和手机提供所有类型的验证码。

1. 创建任务
请求
POST https://api.achicaptcha.com/createTask
参数
| 参数名 | 数据类型 | 必需? | 描述 |
|---|---|---|---|
clientKey | string | yes | API 密钥 |
task.type | string | yes | TiktokCaptchaTask |
task.image | string | yes | 图像的 Base64 |
task.subType | int | yes | 验证码类型:0(浏览器上的旋转验证码)、1(滑块验证码)、2(选择 2 个相同对象)、3(手机、模拟器上的旋转验证码)、5(选择满足问题的物体) |
task.other | string | no | 对于 subType 5,此字段是必需的。验证码的问题,例如:"Which of these objects neighs" |
请求示例
POST /createTask HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "TiktokCaptchaTask",
"image": "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...(10460 chars omitted)...V7Q4rk8i3IvOS/eZexY2wFyvTDXyzAWT5qNlUXkiKiAJVRdUYlkBFEQQRQEC2yAghRCyCWQSyBZAsgWQW1kCyCoCCoqIqoFkVCiCKXVC3ooCKKKxIRkhCxZw+Zj8FjMPpFmJjHRYdL69ad0OidK+5LIM1V6WM3fQBZRD5TbagWWbCZZKsVRiqqCIIindVil0UJQEQ5XRV5oiHZA3sgKBzRBFSyIHS6AgWRQa3RCyAgHZFUahA5ofAdkVLoKgnOyKE6KgoBQUDVGSE2CBYWUVjyRU5qMtgAKCAAqKoGqErZVFCrHYAqjIBRAKoiAqj//Z",
"subType": 2
}
}响应
成功时,服务器将返回 errorId = 0 和 taskId
{
"errorId": 0,
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}发送到服务器的图像样本
在浏览器上:
image 字段 = base64_外部图像|base64_内部图像


在模拟器、手机上:
image 字段是 1 张图像的 base64,裁剪的图像仅包含旋转验证码部分(足够 2 个圆圈,可以在边缘有多余的白色部分,多余部分的长度可选)

2. 获取结果
请求
POST https://api.achicaptcha.com/getTaskResult
参数
| 参数名 | 数据类型 | 必需? | 描述 |
|---|---|---|---|
clientKey | string | yes | 网站上的 API 密钥 |
taskId | string | yes | 从 (1) 获取的 TaskId |
请求示例
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "您的 API_KEY",
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}响应
{
"errorId": 0,
"status": "ready",
"solution": "x1,y1,x2,y2"
}返回结果的含义
errorId = 0且status = ready:解决成功,在solution中读取结果errorId = 1且status = processing:正在解决验证码,等待 1-2 秒后重试errorId 非 0 和 1:系统错误,返回错误代码和错误描述solution:- 对于浏览器上的旋转验证码:返回需要拖动滑块的段长度
- 对于模拟器、手机上的旋转验证码:返回旋转角度,用户根据公式计算需要拖动的段:需要拖动的段 = (L / 180) * solution(其中 L 是从滑块起始位置到结束位置的距离,从滑块中心计算)
- 对于滑块验证码:返回需要沿图像 x 轴拖动的坐标
- 对于选择 2 个相同对象的验证码:返回需要在图像上点击的坐标对 "x1,y1,x2,y2"
- 对于选择满足问题的多个物体的验证码:返回需要在图像上点击的坐标 "x1,y1,x2,y2,x3,y3,..."
集成示例
import requests
import time
import base64
def solve_tiktok_captcha(image_base64, sub_type, question=None, api_key='YOUR_API_KEY'):
# 步骤 1:创建任务
task = {
'type': 'TiktokCaptchaTask',
'image': image_base64,
'subType': sub_type
}
# 如果 subType = 5,添加 other 字段(问题)
if sub_type == 5 and question:
task['other'] = question
create_task_url = 'https://api.achicaptcha.com/createTask'
create_task_payload = {
'clientKey': api_key,
'task': task
}
response = requests.post(create_task_url, json=create_task_payload)
result = response.json()
if result['errorId'] != 0:
raise Exception(result.get('errorDescription', 'Unknown error'))
task_id = result['taskId']
# 步骤 2:获取结果
get_result_url = 'https://api.achicaptcha.com/getTaskResult'
while True:
time.sleep(2) # 等待 2 秒
get_result_payload = {
'clientKey': api_key,
'taskId': task_id
}
response = requests.post(get_result_url, json=get_result_payload)
result = response.json()
if result['errorId'] == 0 and result.get('status') == 'ready':
return result['solution']
if result['errorId'] == 1 and result.get('status') == 'processing':
# 继续等待
continue
# 其他错误
raise Exception(result.get('errorDescription', 'Unknown error'))
# 使用 - 选择 2 个对象验证码的示例(subType = 2)
with open('captcha_image.png', 'rb') as f:
image_base64 = base64.b64encode(f.read()).decode('utf-8')
sub_type = 2 # 0:浏览器旋转,1:滑块,2:选择 2 个对象,3:手机旋转,5:根据问题选择
solution = solve_tiktok_captcha(image_base64, sub_type, api_key='YOUR_API_KEY')
print('TikTok 验证码解决方案:', solution) # "x1,y1,x2,y2"常见错误代码
创建任务时的错误代码
| 错误代码 | 描述 | 注释 |
|---|---|---|
| 0 | success | 创建任务成功 |
| 2 | missing required fields | 缺少必需字段,检查参数(image、subType) |
| 3 | task not supported | 不支持的任务类型 |
| 4 | task creation failed | 创建任务失败,稍后重试 |
| 5 | client key does not exist | API 密钥不存在,检查 API 密钥 |
| 6 | insufficient account balance | 账户余额不足,充值积分 |
获取结果时的错误代码
| 错误代码 | 描述 | 注释 |
|---|---|---|
| 0 | success | 成功,在 solution 字段中读取结果 |
| 1 | processing | 正在处理,等待 1-2 秒后重新发送请求 |
| 5 | client key does not exist | API 密钥不存在,检查 API 密钥 |
| 7 | task failed, please create a new task | 任务失败,请创建新任务 |
| 8 | task ID does not exist | 任务 ID 不存在或已过期 |
最佳实践
为了在使用 Achicaptcha API 时获得最佳效果,请遵循以下原则:
1. 正确识别验证码类型和 subType
- TikTok 使用多种不同类型的验证码
- 准确检测正在显示的验证码类型
- 在请求中发送正确的
subType:0:浏览器上的旋转验证码1:滑块验证码2:选择 2 个相同对象3:手机、模拟器上的旋转验证码5:选择满足问题的物体(需要添加other字段)
2. 正确格式化图像
- 浏览器上的旋转验证码:发送
base64_外部图像|base64_内部图像 - 手机/模拟器上的旋转验证码:发送 1 张图像的 base64(仅包含旋转验证码部分)
- 其他类型:发送相应图像的 base64
- 确保图像以正确的 base64 格式编码
3. 正确处理结果
- 对于模拟器/手机上的旋转验证码:计算拖动距离,公式为:拖动距离 = (L / 180) * solution
如上图所示测量 L,用于拖动距离计算 - 对于选择对象验证码:解析坐标字符串 "x1,y1,x2,y2" 以获取需要点击的点
- 对于滑块验证码:使用返回的 x 坐标拖动滑块
4. 轮询间隔
- 在结果检查之间至少等待 1-2 秒
- 不要用太多连续请求轰炸 API
- 设置超时以避免无限循环(建议 120 秒)
5. 错误处理
- 检查
errorId = 1和status = processing以继续等待 - 适当处理其他错误
- 为临时错误实施重试逻辑
6. API 密钥安全
- 不要在代码中硬编码 API 密钥
- 使用环境变量
- 不要在客户端暴露 API 密钥
有用的链接: