AkamaiSBSD任务

AkamaiSBSD任务

 

通过使用同步接口创建任务 https://sync.ez-captcha.com/createSyncTask, 并直接获取结果

中国优化地址:http://47.115.166.118:16000/createSyncTask

如果您得到了一个无效的Payload,请联系我们,我们将会为您解决和优化

 

任务类型

任务类型

描述

价格(美元)

任务类型

描述

价格(美元)

AkamaiSBSDTaskProxyless

AkamaiSBSD 解决方案

$2.5/k

body

向API发送POST请求。使用以下表单数据

参数

类型

必需

描述

参数

类型

必需

描述

pageUrl

string

true

输入您当前要过的页面的URL

bmSo

string

true

如果存在bm_so cookie,则上传bm_so cookie的值,否则上传sbsd_o cookie的值

sbsdUrl

string

true

获取sbsd脚本的地址。注意,大部分网站这个url会根据每次请求变换,所以需要动态获取。
是sbsdUrl地址,不是sbsdUrl返回来的脚本

ua

string

true

你程序中使用的UserAgent(需要一致),仅支持Chrome的UserAgent,建议使用Chrom最新版的UserAgent.

lang

string

true

使用的语言,与请求头中的accept-language一致, 如 “en-GB”、“en-US”等。

script_base64

string

true

该值为sbsd javascript脚本的Base64编码形式

备注

  1. lang和请求头的accept-language、代理所在区域需要保持一致。

  2. ua仅支持Chrome的ua,建议使用最新版本的Chrome ua

  3. 大部分网站的sbsd url是会随机变化的,所以需要根据每次请求动态获取。

  4. 请求头的值以及顺序需要跟浏览器保持高度一致。

创建任务

示例

POST https://sync.ez-captcha.com/createSyncTask

中国优化地址:http://47.115.166.118:16000/createSyncTask
Content-Type: application/json

{ "clientKey": "YourClientKey", "task": { "type": "AkamaiSBSDTaskProxyless", "pageUrl":pageUrl, "bmSo":bmSo, "sbsdUrl":sbsdUrl, "ua":ua, "lang":lang, "script_base64":script_base } }

API会在响应体中返回payload,payload是base64加密后的数据,经过base64解密后代表需要发送的body数据。

 

返回示例

返回的Payload字段是base64编码之后的值,解码之后作为body字段数据通过post提交到对应接口

{ "errorId": 0, "solution": { "payload": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "status": "ready" }

 

代码示例

import threading import time import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning import random import string import json import tls_client import os import base64 import platform from urllib.parse import urlparse, parse_qsl, urlencode, urlunparse, quote import secrets requests.packages.urllib3.disable_warnings(InsecureRequestWarning) def solveSbsd(client_key,pageUrl,bmSo,sbsdUrl,ua,lang,script_base): url = "https://sync.ez-captcha.com/createSyncTask" data = { "clientKey":client_key, "task":{ "type": "AkamaiSBSDTaskProxyless", "pageUrl":pageUrl, "bmSo":bmSo, "sbsdUrl":sbsdUrl, "ua":ua, "lang":lang, "script_base64":script_base } } resp = requests.post(url,json=data,timeout=10,verify=False) time.sleep(random.uniform(0.8,1.5)) return resp.text def get_middle_string_strict(text: str, before: str, after: str) -> str: parts = text.split(before, 1) if len(parts) < 2: return "" sub = parts[1].split(after, 1) if len(sub) < 2: # return "" return sub[0] def solve(): client_key = "" proxy_self = "" proxys = { 'http':'http://127.0.0.1:8887', 'https':'http://127.0.0.1:8887' } session = tls_client.Session( client_identifier="chrome_133", random_tls_extension_order=True, ) session.proxies = proxys url = "" domain = "" user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36" sec_ch_ca = '"Google Chrome";v="141", "Not?A_Brand";v="8", "Chromium";v="141"' lang = "en-US" contry = "us" accept_lang = 'en-US,en;q=0.9' headers = { 'sec-ch-ua':sec_ch_ca, 'sec-ch-ua-mobile':'?0', 'sec-ch-ua-platform':'"Windows"', 'upgrade-insecure-requests':'1', 'user-agent':user_agent, 'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'sec-fetch-site':'none', 'sec-fetch-mode':'navigate', 'sec-fetch-user':'?1', 'sec-fetch-dest':'document', 'accept-encoding':'gzip, deflate, br, zstd', 'accept-language':accept_lang, 'priority':'u=0, i' } session.headers = headers resp = session.get(url,allow_redirects=False) sbsd_url = get_middle_string_strict(resp.text,'/noscript><script type="text/javascript" src="', '" defer></sc') sbsd_url = domain + sbsd_url #slove sbsd sbsd_header = { 'sec-ch-ua-platform':'"Windows"', 'user-agent':user_agent, 'sec-ch-ua':sec_ch_ca, 'sec-ch-ua-mobile':'?0', 'accept':'*/*', 'sec-fetch-site':'same-origin', 'sec-fetch-mode':'no-cors', 'sec-fetch-dest':'script', 'referer':url, 'accept-encoding':'gzip, deflate, br, zstd', 'accept-language':accept_lang } session.headers = sbsd_header resp = session.get(sbsd_url,allow_redirects=True) cookie_dict = session.cookies.get_dict() # check bm_so bm_so = '' if 'bm_so' in cookie_dict: bm_so = cookie_dict['bm_so'] elif 'sbsd_o' in cookie_dict: bm_so = cookie_dict['sbsd_o'] script_base = base64.b64encode(resp.text.encode("utf-8")).decode("ascii") sbsd_payload = solveSbsd(client_key,url,bm_so,sbsd_url,user_agent,lang,script_base) body = json.loads(sbsd_payload)["solution"]["payload"] body = '{"body":"'+base64.b64decode(body).decode("utf-8")+'"}' sbsd_post_header = { 'sec-ch-ua-platform':'"Windows"', 'user-agent':user_agent, 'sec-ch-ua':sec_ch_ca, 'content-type':'application/json', 'sec-ch-ua-mobile':'?0', 'accept':'*/*', 'origin':domain, 'sec-fetch-site':'same-origin', 'sec-fetch-mode':'cors', 'sec-fetch-dest':'empty', 'referer':url, 'accept-encoding':'gzip, deflate, br, zstd', 'accept-language':accept_lang, 'priority':'u=1, i' } post_sbsd_url = "http"+get_middle_string_strict(sbsd_url,"http","?v=") session.headers = sbsd_post_header resp = session.post(post_sbsd_url,json=body) if resp.status_code != 200: print(resp.text) print("sbsd cookie error") return cookie_dict = session.cookies.get_dict() print(cookie_dict) if __name__ == "__main__": solve()

 

429 状态码

如果遇到了这个状态码,请联系我们,我们会提供帮助。