Cloudflare Challenge (5s) 协议接口
⚠️ 通过 createTask 创建任务, 然后通过 getTaskResult 获取识别结果
ℹ️ 该任务类型必须传入代理proxy信息,暂不支持 ProxyLess
支持类型 我们支持大部分cloudflare保护的网站,包括5s challenge,turnstile,captcha 等具有验证模式网站。但是由于网站模式可定制,如果你的网站不支持请联系我们。
Turnstile/Challenge 验证码是替代 reCaptcha/hCaptcha 的另一种尝试。我们自动支持其所有子类型:
- turnstile
- 手动
- 非交互式
- 不可见
- challenge
- 5s challenge
- 嵌入式 turnstile
在你调用过程中,无需指定子类型。还没有必要提供您自己的自定义 User-Agent
,我们会忽略此参数。
挑战类型 | 说明 | 支持情况 |
---|---|---|
challenge | stable | |
challenge + turnstile | stable |
任务类型type
如下
AntiCloudflareTask
必须传入代理
创建任务
通过 createTask 创建任务
当在使用challenge过程中,我们仅需要你传入websiteURL
和proxy
即可,其他参数可选。
参数结构
属性 | 类型 | Required | 说明 |
---|---|---|---|
type | String | Required | AntiCloudflareTask |
websiteURL | String | Required | 目标网页的地址。可以在网站上的任何地方,甚至在会员区域。 |
proxy | String | Required | 学习如何使用代理 |
请求示例
txt
POST https://api.capsolver.com/createTask
Host: api.capsolver.com
Content-Type: application/json
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "AntiCloudflareTask",
"websiteURL": "https://www.yourwebsite.com",
// Proxy必须和请求站点的ip完全一致
"proxy": "158.120.100.23:334:user:pass"
}
}
响应示例
json
{
"errorId": 0,
"status": "idle",
"taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}
获取结果
使用 getTaskResult 方法获取识别结果
根据系统负载,您将在 1s
到 20s
的时间间隔内得到结果
请求示例
txt
POST https://api.capsolver.com/getTaskResult
Host: api.capsolver.com
Content-Type: application/json
json
{
"clientKey": "YOUR_API_KEY",
"taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}
响应示例
json
{
"errorId": 0,
"taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006",
"status": "ready",
"solution": {
"cookies": {
"cf_clearance": "..."
},
"proxy": "...",
"token": "...",
"type": "challenge",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
}
使用 SDK 请求
python
#pip install --upgrade capsolver
#export CAPSOLVER_API_KEY='...'
import capsolver
# capsolver.api_key = "..."
solution = capsolver.solve({
"type": "AntiCloudflareTask",
"websiteURL": "https://www.yourwebsite.com",
"proxy": "158.120.100.23:334:user:pass"
})
go
package main
import (
"fmt"
capsolver_go "github.com/capsolver/capsolver-go"
"log"
)
func main() {
// first you need to install sdk
//go get github.com/capsolver/capsolver-go
capSolver := capsolver_go.CapSolver{ApiKey: "..."}
solution, err := capSolver.Solve(map[string]any{
"type": "AntiCloudflareTask",
"websiteURL": "https://www.yourwebsite.com",
"proxy": "158.120.100.23:334:user:pass"
})
if err != nil {
log.Fatal(err)
return
}
fmt.Println(solution)
}
Sample Code
python
# pip install requests
import requests
import time
api_key = "YOUR_API_KEY" # your api key of capsolver
def capsolver():
payload = {
"clientKey": api_key,
"task": {
"type": "AntiCloudflareTask",
"websiteURL": "https://www.yourwebsite.com",
"proxy": "158.120.100.23:334:user:pass"
}
}
res = requests.post("https://api.capsolver.com/createTask", json=payload)
resp = res.json()
task_id = resp.get("taskId")
if not task_id:
print("Failed to create task:", res.text)
return
print(f"Got taskId: {task_id} / Getting result...")
while True:
time.sleep(1) # delay
payload = {"clientKey": api_key, "taskId": task_id}
res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
resp = res.json()
status = resp.get("status")
if status == "ready":
return resp.get("solution", {})
if status == "failed" or resp.get("errorId"):
print("Solve failed! response:", res.text)
return
solution = capsolver()
print(solution)
go
package main
import (
"bytes"
"encoding/json"
"errors"
"fmt"
"io"
"net/http"
"time"
)
type capSolverResponse struct {
ErrorId int32 `json:"errorId"`
ErrorCode string `json:"errorCode"`
ErrorDescription string `json:"errorDescription"`
TaskId string `json:"taskId"`
Status string `json:"status"`
Solution map[string]any `json:"solution"`
}
func capSolver(apiKey string, taskData map[string]any) (*capSolverResponse, error) {
uri := "https://api.capsolver.com/createTask"
res, err := request(uri, map[string]any{
"clientKey": apiKey,
"task": taskData,
})
if err != nil {
return nil, err
}
if res.ErrorId == 1 {
return nil, errors.New(res.ErrorDescription)
}
uri = "https://api.capsolver.com/getTaskResult"
for i := 0; i < 120; i++ {
time.Sleep(time.Second * 3) // delay
res, err = request(uri, map[string]any{
"clientKey": apiKey,
"taskId": res.TaskId,
})
if err != nil {
return nil, err
}
if res.ErrorId == 1 {
return nil, errors.New(res.ErrorDescription)
}
if res.Status == "ready" {
return res, err
}
}
return res, errors.New("solve timeout")
}
func request(uri string, payload any) (*capSolverResponse, error) {
payloadBytes, err := json.Marshal(payload)
if err != nil {
return nil, err
}
resp, err := http.Post(uri, "application/json", bytes.NewReader(payloadBytes))
if err != nil {
return nil, err
}
defer resp.Body.Close()
responseData, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
capResponse := &capSolverResponse{}
err = json.Unmarshal(responseData, capResponse)
if err != nil {
return nil, err
}
return capResponse, nil
}
func main() {
apikey := "YOUR_API_KEY"
res, err := capSolver(apikey, map[string]any{
"type": "AntiCloudflareTask",
"websiteURL": "https://www.yourwebsite.com",
"proxy": "158.120.100.23:334:user:pass",
})
if err != nil {
panic(err)
}
fmt.Println(res.Solution)
}