/
Akamai任务

Akamai任务

 

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

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

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

 

任务类型

任务类型

描述

Price

Price(USD)

任务类型

描述

Price

Price(USD)

AkamaiWEBTaskProxyless

Akamai 解决方案

38 POINTS

$3.8/1k

Sensor Data

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

参数

类型

必需

描述

参数

类型

必需

描述

pageUrl

string

true

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

v3Url

string

true

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

bmsz

string

true

你的会话中最新的bmsz cookie 值

abck

string

true

你的会话中最新的_abck cookie 值

ua

string

true

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

lang

string

true

使用的语言,与请求头中的accept-language一致, 如 “en-GB”。尽量避免使用en-US.

script_base64

string

true

仅在第一个包中需要发送,该值为v3 javascript脚本的Base64编码形式

index

int32

true

表示当前是第几个包,从0开始计算

encodeData

string

true

第一个包中该值为空,该值从第一个包返回值中获取。第一个包之后只需要填充这个值不需要填充script_base64。

备注

  1. 有些网站即使获取到abck cookie为”~-1~”也是有效的,所以我们建议每次获取到abck cookie之后都使用一次判断是否有效,直到第八次。发送sensor_data的次数跟网站的防护级别有关。

  2. 使用动态的代理,防止被风控。

  3. lang和请求头的accept-language需保持一致,建议lang和代理所在区域也保持一致。

  4. ua仅支持Chrome的ua,建议使用最新版本的Chrome ua。建议ua版本和Chrome TLS版本一致。

  5. 有些网站检测较为严格,发包时请关闭本机的全局代理及抓包工具,例如Clash、Charles等,防止受到干扰。

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

  7. 最后使用_abck cookie的时候请保持和前面发送sensor_data数据包时一样的IP、UA、TLS

创建任务

示例

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

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

{ "clientKey": "YourClientKey", "task": { "type": "AkamaiWEBTaskProxyless", "pageUrl": "websiteUrl", "v3Url":"v3Url", "bmsz": "xxx", "abck": "xxx", "ua": "xxx", "lang": "xxx", "script_base64": "xxx", "index": 0, "encodeData": "xxx" } }

API会在响应体中返回payload和encodedata,payload代表需要发送的sensor_data数据。

 

返回示例

返回的Payload作为sensor_data 通过post提交到对应接口

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

 

代码示例

import base64 from curl_cffi import requests import threading from typing import Dict, List import json def akamai_v3_post(): url = "WebsiteUrl" v3_url = "v3_script_url" user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36' client_key = 'YourClientKey' proxies = { #'http': 'http://127.0.0.1:8888', #'https': 'https://127.0.0.1:8888' } headers1: Dict[str, str] = { 'cache-control': 'max-age=0', 'sec-ch-ua': '"Not A(Brand";v="8", "Chromium";v="135", "Google Chrome";v="135"', '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': 'en-GB,en;q=0.9', 'priority': 'u=0, i' } headers2: Dict[str, str] = { 'sec-ch-ua-platform': '"Windows"', 'user-agent': user_agent, 'sec-ch-ua': '"Not A(Brand";v="8", "Chromium";v="135", "Google Chrome";v="135"', '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': 'en-GB,en;q=0.9', 'priority': 'u=2' } try: session = requests.Session() resp1 = session.get( url, headers=headers1, proxies=proxies, verify=False, impersonate="chrome124" ) resp2 = session.get( v3_url, headers=headers2, proxies=proxies, verify=False, impersonate="chrome124" ) bz_sz_cookie = session.cookies.get('bm_sz', '') abck_cookie = session.cookies.get('_abck', '') resp_script = base64.b64encode(resp2.content).decode('utf-8') ez_url = "https://sync.ez-captcha.com/createSyncTask" payload = { "clientKey":client_key, "task":{ "type": "AkamaiWEBTaskProxyless", "pageUrl": url, "v3Url":v3_url, "bmsz": bz_sz_cookie, "abck":abck_cookie, "ua": user_agent, "lang": "en-GB", "script_base64": resp_script, "index": 0, "encodeData": "" } } response = requests.post(ez_url, json=payload, timeout=10) encodedata = json.loads(response.text).get('solution').get('encodedata') sensordata = {'sensor_data':json.loads(response.text).get('solution').get('payload')} count = 1 while count <= 8: resp3 = session.post( v3_url, headers=headers2, proxies=proxies, verify=False, json=sensordata, impersonate="chrome124" ) ret_cookie = session.cookies.get('_abck', '') #Check if using the cookie directly is effective; if so, return it. If not, continue attempting to retrieve it up to eight times. #if ..... return print(ret_cookie) payload = { "clientKey":client_key, "task":{ "type": "AkamaiWEBTaskProxyless", "pageUrl": url, "v3Url":v3_url, "bmsz": bz_sz_cookie, "abck":ret_cookie, "ua": user_agent, "lang": "en-GB", "script_base64": "", "index": count, "encodeData": encodedata } } response = requests.post(ez_url, json=payload, timeout=10) sensordata = {'sensor_data':json.loads(response.text).get('solution').get('payload')} count = count + 1 print("Get cookie error") except Exception as e: print(f"Request error: {e}") return None if __name__ == "__main__": akamai_v3_post()

 

428 状态码

如果经过上面的步骤后,对目标接口发送请求得到了428状态码的响应,说明触发了Sec-CPT机制,您需要进行以下步骤:

  1. 获取该响应体中的chlg_duration参数,用于后续操作

  2. 再次按照先前的步骤获取sensor_data一次,并将参数pageUrl设置为原先的pageUrl+ "/_sec/cp_challenge/ak-challenge-3-6.htm" (需要将路径中的版本号改为当前网站用的正确版本),然后提交

  3. 程序 Sleep 先前获取到的chlg_duration参数中的时间

  4. 再次获取一次sensor data,然后提交

  5. 如果最终成功,你将会从响应中得到sec-cpt cookie,然后再次请求目标接口即可

Related content