...
属性 | 类型 | 必须 | 说明 | ||||||
---|---|---|---|---|---|---|---|---|---|
type | string | 是 | CloudFlareTaskS2
| ||||||
websiteURL | string | 是 | 网页地址,需要识别的地址。 | ||||||
userAgent | string | 否 | 自定义Ua值 仅CloudFlareTaskS2类型支持 | ||||||
waitLoad | Bool | 否 | 是否必须等待页面加载完成(如果你需要完整内容) | ||||||
requiredCookies | List | 否 | 可以要求获取指定Cookies名称,默认为 可以指定多个,但不是一定能获取到 | ||||||
blockImage | Bool | 否 | 是否关闭图片加载,用于节省流量 | ||||||
proxy | String | 是 | 代理地址,支持以下格式:
注意:如果需要权限,请将以下地址加入白名单:
注意:CF盾对代理要求较高,请使用国际代理,如果报ERROR_CAPTCHA_UNSOLVABLE错误,请更换代理再试一下,也可以联系我们测试是否能过(绝大部份情况都能过) 注意:不要使用本地代理(127.0.0.1、localhost、192.168.x.x、172.0.x.x),本地代理只有你自己电脑才能访问,服务器访问不了! | ||||||
postData | Dict | 否 | 如果添加此字段,请求将会以Post的方式发送,如:
|
请求示例
代码块 | ||
---|---|---|
| ||
{ "clientKey": "cc9c18d3e263515c2c072b36a7125eecc078618f", "task": { "type": "CloudFlareTaskS2", "websiteURL": "https://nowsecure.nlin", "proxy": "http://JN3wWChA:Dsg7ckfv@45.91.239.47:62930", //请用你自己的代理,这个只是演示 "waitLoad": false, // 是否需要等待加载完成(如果你需要完整内容就写true,会增加识别时间) "requiredCookies": ["cf_clearance"] // 可以要求获取指定Cookies名称,可不填,不一定能获取到 } } |
响应示例
代码块 |
---|
{ "errorId": 0, "errorCode": "", "errorDescription": "", "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006" // 请记录此ID } |
...
请求节点:
状态 | ||||
---|---|---|---|---|
|
https://api.yescaptcha.com
状态 | ||||
---|---|---|---|---|
|
https://chinacn.yescaptcha.com
请求地址: https://api.yescaptcha.com/getTaskResult
...
参数 | 类型 | 说明 |
---|---|---|
errorId | Integer | 错误提示: 0 - 没有错误,1 - 有错误 |
errorCode | string | 错误代码,点这里查看全部错误列表 |
errorDescription | string | 错误详细描述 |
status | String | processing - 正在识别中,请3秒后重试 |
solution | Object | 识别结果,不同类型的任务结果会有所区别。 |
user_agent | string | 使用的ua值,请使用返回的值进行后续请求 |
cookies | Object | 返回的cookies值,请使用返回的值进行后续请求, 一般cloudflare5s盾的cookies包含 这个cookie值有一定的有效期,有的网站长达1小时 所以1小时内不需要重复请求,但是也需要注意请求的频率 |
request_headers | Object | 请求时的headers,建议你在使用时带上这个值 放到你的请求的headers中放到你的请求的headers中! |
headers | Object | 请求成功后响应的headers |
content | string | 返回的网页内容源码 |
...
代码块 | ||
---|---|---|
| ||
from curl_cffi import requests proxies = { 'http': "http://127.0.0.1:10911", 'https': "http://127.0.0.1:10911", } # 正常情况是这样的 response = requests.get("https://apkpure.com/", proxies=proxies) print("请求响应:", response.status_code) print("网页标题:", response.text[:63]) # 返回: # 请求响应: 403 # 网页标题: <!DOCTYPE html><html lang="en-US"><head><title>Just a moment... # 使用 curl_cffi.requests请求 # impersonate参数指定了模拟Chrome浏览器的指纹 response = requests.get( "https://apkpure.com/", proxies=proxies, impersonate="chrome110") print("请求响应:", response.status_code) print("网页标题:", response.text[:63]) # 返回: # 请求响应: 200 # 网页标题: <!DOCTYPE html><html lang="en"><head><title>Download APK on And |
测试DEMO
View file | ||
---|---|---|
|
代码块 |
---|
fromimport curl_cffirequests import requeststime import timere # 创建任务创建任务函数 def create_task(url, proxy, client_key): data""" = { 创建Cloudflare防护页面的任务 :param #url: 填您自己的密钥目标网址 :param proxy: 代理服务器地址 "clientKey": clientKey, :param client_key: 客户端密钥 "task": {:return: 创建任务的响应结果 """ data "type": "CloudFlareTaskS2",= { "websiteURLclientKey": urlclient_key, "proxytask": proxy{ } }"type": "CloudFlareTaskS2", url = "https://api.yescaptcha.com/createTask" response "userAgent": "", # 指定chrome内核, 可以为空,如:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" "waitLoad": True, "websiteURL": url, "proxy": proxy } } api_url = "https://api.yescaptcha.com/createTask" response = requests.post(api_url, json=data).json() return response # 获取任务结果函数 def get_task(task_id, client_key): """ 获取任务的执行结果 :param task_id: 任务ID :param client_key: 客户端密钥 :return: 任务结果的响应结果 """ api_url = "https://api.yescaptcha.com/getTaskResult" data = { "clientKey": client_key, "taskId": task_id } response = requests.post(api_url, json=data).json() return response # 获取结果完整的请求函数 def get_task(task_idresult(url, proxy, client_key): url = "http://api.yescaptcha.com/getTaskResult""" data = {完整的创建任务并获取结果的流程 :param #url: 填您自己的密钥目标网址 "clientKey":param proxy: clientKey, 代理服务器地址 "taskId":param taskclient_id } response = requests.post(url, json=data).json()key: 客户端密钥 :return: response任务执行结果 # 完整的请求 def get_result(*args, **kwargs):""" uuidtask_response = create_task(*argsurl, proxy, **kwargs)client_key) if not uuidtask_response or not uuidtask_response.get('taskId'): return uuidtask_response print("TaskID:", uuidtask_response) for i_ in range(30): time.sleep(3) result = get_task(uuidtask_response.get('taskId'), client_key) if result.get('status') == 'processing':': continue elif result.get('status') == 'ready': return result else: print("Fail:", result) raise Exception(result) return {"status": "timeout"} if __name__ == '__main__': # 客户端密钥, 登陆yescaptcha.com获取 #client_key 填您的密钥= "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" clientKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 代理服务器地址,填您自己的代理地址 # 填您自己的代理,不要填本地的地址不要填本地地址(如:http://127.0.0.1:1080,http://localhost:1080这种,这个只有你自己能用) proxy = "http://JN3wWChAuser:Dsg7ckfv@176password@103.222147.59170.86108:6404864484" proxies = { 'http': proxy, 'https': proxy, } # 要访问的网址目标网址 url = "https://nowsecure.nlin/" # 正常情况是这样的 使用普通requests请求 # response = requests.get(url, proxies=proxies) # print("请求响应:", response.status_code) # print("网页标题:", re.search(r"<title>(.*?)</title>", response.text[:200]) # 返回:请求响应: 403 # 使用 curl_cffi.requests请求 # response = requests.get(url, proxies=proxies, impersonate="chrome110") # print("请求响应:)) if response.text else print("网页标题:", response.status_code) text[:1000]) # print("网页标题:",是否为CF盾:", "cf_chl" in response.text[:200]) # 返回:请求响应: 200 # 使用接口返回的值来请求 task_result = get_result(url, proxy=proxy, client_key) if not task_result.get("solution"): print("任务失败", task_result) exit() solution = task_result.get("solution") # 从solution中获取请求头和cookies headers = {solution.get("request_headers") headers.update(solution.get("headers")) 'User-Agent':cookies = solution.get("user_agentcookies") } print("Headers:", headers) print("UaCookies:", headerscookies) cookies = solution.get("cookies") # 使用curl_cffi.requests请求 # 请先安装curl_cffi库,并且是pre版本:pip install curl_cffi --pre print("Cookies:", cookies) from curl_cffi import requests as curl_requests response = curl_requests.get(url, headers=headers, cookies=cookies, proxies=proxies, impersonate="chrome110chrome120") print("请求响应:", response.status_code) print("网页标题:", re.search(r"<title>(.*?)</title>", response.text)) if response.text else print("网页标题:", response.text[:2001000]) print("是否为CF盾:", "cf_chl" in response.text) |