Chris

Back to Home Previous Next 中文文档

Datadome

Description

Request URL (POST):

Version API URL
Universal http://api.nocaptcha.io/api/wanda/datadome/universal

Request Headers:

Parameter Name Description Required
User-Token User secret, get from homepage Yes
Content-Type application/json Yes
Developer-Id Developer ID, for developer users, string from homepage invite link (e.g. xxx/register?c=abcdef, then abcdef is Developer ID) No

POST Data (JSON):

Parameter Name Type Description Required
href String Page URL that triggers datadome verification Yes
proxy String No need to keep proxy consistent, if passing proxy please use overseas proxy, format: ip:port or usr:pwd@ip:port (contact admin if issues) Yes
js_url String Required for js mode, API ending with /js/ that returns datadome cookie, e.g.: https://dwt.soundcloud.com/js/ No
js_key String Required for js mode, search for ddjskey value in f12, e.g.: E6EAF460AA2A8322D66B42C85B62F9 No
captcha_url String "url": "/captcha?initCid=xxx" triggered by post(xhr) API No
interstitial Boolean Whether interstitial device verification mode will be triggered, default false No
user_agent String Custom user_agent, must keep user-agent consistent No
did String Fingerprint ID returned by js mode (in extra property), pass this parameter for subsequent slider captcha from xhr APIs No
cookies String Current page cookies No
timeout Integer Verification timeout No

Response Data (JSON):

Successful Response

Parameter Name Type Description
status Integer Whether the call was successful, 1 for success, 0 for failure. Use this value to judge
msg String Chinese description of the result
id String The unique request ID for this particular request (can be used for subsequent record queries)
data.datadome String The available datadome cookie returned after successful verification, can be used for subsequent verification APIs
cost String Verification time taken (in milliseconds)
{
  "status": 1,
  "msg": "验证成功",
  "id": "639e056b-49bd-4895-94ab-68d59e00873e",
  "cost": "4635.12ms",
  "data": {
    "datadome": "HYvnTVSxppxMMrSk_Z_MOHoSKkQRd2ppQr~pOeo2nDlL7Lg7QBwb2ew5OYQxSSSH1CR9NzO78A25KHM7kLV6OydtvwvJZ773Jil1mPC7ZoFSQQDrDYVeHZtjq_BWUai6"
  }
}

Call Example

python

pip install -U pynocaptcha -i https://pypi.python.org/simple
import re
from utils import USER_TOKEN, get_idea_proxy
from pynocaptcha import magneto, crack_datadome


def checkbalance(session: magneto.Session, extra):
    """
    Subsequent target API request to be performed
    """
    data = {
        'language': 'en-ca',
        'csrfmiddlewaretoken': extra['csrfmiddlewaretoken'],
        'card_number': '98082560015032626594919',
        'pin': '4632',
        'g-recaptcha-response': 'true',
    }
    
    headers = {
        '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',
        'accept-language': extra['accept-language'],
        'content-type': 'application/x-www-form-urlencoded',
        'origin': 'https://homedepot-ca.cashstar.com',
        'priority': 'u=0, i',
        'referer': 'https://homedepot-ca.cashstar.com/reload/',
        'sec-ch-ua': extra['sec-ch-ua'],
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': extra['sec-ch-ua-platform'],
        'sec-fetch-dest': 'document',
        'sec-fetch-mode': 'navigate',
        'sec-fetch-site': 'same-origin',
        'sec-fetch-user': '?1',
        'upgrade-insecure-requests': '1',
        'user-agent': extra['user-agent']
    }
    return session.post(
        'https://homedepot-ca.cashstar.com/reload/',
        headers=headers,
        data=data, 
    )


def parse_index(resp, extra):
    """
    Parse data obtained from href homepage response source code
    """
    token = re.search(r'name="csrfmiddlewaretoken" value="(.*?)"', resp.text)[1]
    extra['csrfmiddlewaretoken'] = token


session, resp, extra = crack_datadome(
    user_token=USER_TOKEN,
    href='https://homedepot-ca.cashstar.com/reload/',
    verifiers=[
        checkbalance
    ],
    parse_index=parse_index,
    proxy=get_idea_proxy("hk"),
    debug=True
)

print(resp.text)