首先获取tokenkey,签名算法自己找
sv = '120'
function_id = 'genToken'
st = int(time.time() * 1000)
client_version = '11.3.2'
client = 'android'
body = json.dumps({
"to": "https://plogin.m.jd.com/jd-mlogin/static/html/appjmp_blank.html",
})
uuid_str = hashlib.md5(str(int(time.time() * 1000)).encode()).hexdigest()[0:16]
sign = f'functionId={function_id}&body={body}&uuid={uuid_str}&client={client}&clientVersion={client_version}&st={st}&sv={sv}'
sign = get_sign(sign)
print(f"sign={sign}")
url = 'https://api.m.jd.com/client.action?functionId=' + function_id
params = f'&clientVersion={client_version}&build=87697&client={client}&uuid={uuid_str}&st={st}&sign={sign}&sv={sv}&lang=zh_CN'
headers = {
'charset': "UTF-8",
'user-agent': "okhttp/3.12.1;jdmall;iphone;version/10.3.5;build/92610;",
'content-type': "application/x-www-form-urlencoded; charset=UTF-8",
'cookie': ck
}
body = 'body=' + quote(body)
resp = requests.post(url=url + params,
data=body,
headers=headers)
token_key = resp.json()['tokenKey']
print(f'token_key={token_key}')
appjmp(token_key)
然道tokenkey以后转pt_pin (移动端cookie):
def appjmp(tokenKey): # 方法 传递 wskey & tokenKey
if tokenKey == 'xxx': # 判断 tokenKey返回值
return False # 返回 -> False[Bool], Wskey
headers = {
'User-Agent': ':Dalvik/2.1.0 (Linux; U; Android 5.1.1; VOG-AL00 Build/LMY48Z)',
'accept': '*/*',
'x-requested-with': 'com.jingdong.app.mall'
} # 设置 HTTP头
params = {
'tokenKey': tokenKey,
'to': 'https://plogin.m.jd.com/jd-mlogin/static/html/appjmp_blank.html'
} # 设置 HTTP_URL 参数
url = 'https://un.m.jd.com/cgi-bin/app/appjmp' # 设置 URL地址
try: # 异常捕捉
res = requests.get(url=url, headers=headers, params=params, verify=False, allow_redirects=False,
timeout=20) # HTTP请求 [GET] 阻止跳转 超时 20秒
except Exception as err: # 异常捕捉
print("JD_appjmp 接口错误 请重试或者更换IP\n") # 标准日志输出
print(str(err)) # 标准日志输出
return False # 返回 -> False[Bool], Wskey
else: # 判断分支
try: # 异常捕捉
res_set = res.cookies.get_dict() # 从res cookie取出
print(f"cookies={res_set}\n")
pt_key = 'pt_key=' + res_set['pt_key'] # 取值 [pt_key]
pt_pin = 'pt_pin=' + res_set['pt_pin'] # 取值 [pt_pin]
jd_ck = str(pt_key) + ';' + str(pt_pin) + ';' # 拼接变量
print(f"ck={jd_ck}\n")
to_login(jd_ck)
except Exception as err: # 异常捕捉
print("JD_appjmp提取Cookie错误 请重试或者更换IP\n") # 标准日志输出
print(str(err)) # 标准日志输出
return False # 返回 -> False[Bool], Wskey
else: # 判断分支
if 'fake' in pt_key: # 判断 pt_key中 是否存在fake
return False # 返回 -> False[Bool], Wskey
else: # 判断分支
return True, jd_ck # 返回 -> True[Bool], jd_ck
转wq_skey(也是移动端的一种cookie,qq环境是这个)