Skip to content
On this page

Cloudflare Challenge (5s) 协议接口

⚠️ 通过 createTask 创建任务, 然后通过 getTaskResult 获取识别结果

ℹ️ 该任务类型必须传入代理proxy信息,暂不支持 ProxyLess

支持类型 我们支持大部分cloudflare保护的网站,包括5s challenge,turnstile,captcha 等具有验证模式网站。但是由于网站模式可定制,如果你的网站不支持请联系我们。

Turnstile/Challenge 验证码是替代 reCaptcha/hCaptcha 的另一种尝试。我们自动支持其所有子类型:

  • turnstile
    • 手动
    • 非交互式
    • 不可见
  • challenge
    • 5s challenge
    • 嵌入式 turnstile

在你调用过程中,无需指定子类型。还没有必要提供您自己的自定义 User-Agent,我们会忽略此参数。

挑战类型说明支持情况
img_2.pngchallengestable
img_3.pngchallenge + turnstilestable

任务类型type如下

  • AntiCloudflareTask 必须传入代理

创建任务

通过 createTask 创建任务

当在使用challenge过程中,我们仅需要你传入websiteURLproxy即可,其他参数可选。

参数结构

属性类型Required说明
typeStringRequiredAntiCloudflareTask
websiteURLStringRequired目标网页的地址。可以在网站上的任何地方,甚至在会员区域。
proxyStringRequired学习如何使用代理

请求示例

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 方法获取识别结果

根据系统负载,您将在 1s20s 的时间间隔内得到结果

请求示例

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)
}