淘寶x-sign算法精密分析

python 版本demo
運行條件: python3 + requests 庫python

import hashlib
import json
import time
from urllib import parseandroid

import requestsjson

請求籤名的校驗參數
token=‘1234’api

請求淘寶的api接口
api=‘mtop.taobao.rate.detaillist.get’app

請求淘寶的api接口版本
v=‘4.0’post

獲取簽名信息 參數data 要注意轉義符號
data = 「{「pageSize」:「10」,「foldFlag」:「0」,「hasPic」:「1」,「pageNo」:「1」,「auctionNumId」:「602659642364」}」fetch

淘寶請求地址,全部post請求基本均可以轉換成get請求
taobao_url = 「http://acs.m.taobao.com/gw/」+api+"/"+v+"?data=" + dataui

sid 須要登錄淘寶後獲取,通常長度爲32位
sid = ‘1d80’
pv 對應簽名版本
pv = ‘6.3’url

appKey 固定值,固定爲’21646297’
appKey = ‘21646297’code

ttid 手機淘寶版本號
ttid = ‘701186@taobao_android_9.1.0’

x_features 對應api功能
x_features = ‘27’

deviceId 設備id,可44位隨機
deviceId = ‘AiN8kvbdEkyD1P3CqFhYct1a7PmMab5dj804e192TcrV’

utdid 淘寶uuid,能夠24位隨機
utdid = ‘XcZJFF61gMADAep76BgfX2AD’

def get_sign(data):
url = ‘http://api.xsign.com/api/sign’ # 獲取簽名的地址
params = {
‘sid’: sid,
‘data’: hashlib.md5(data.encode(encoding=‘UTF-8’)).hexdigest(), # 獲取簽名須要將data進行md5處理,以方便數據傳輸
‘api’: api,
‘v’: v,
‘t’: str(int(time.time())), # 時間戳,單位:秒
‘ttid’: ttid,
‘utdid’: utdid,
‘deviceId’: deviceId,
‘x-features’: x_features,
‘appKey’: appKey,
‘pv’: pv,
‘dataMd5’: ‘true’, # 若是data進行了md5處理,那這裏須要設置爲’true’,
‘token’: token, # 獲取簽名參數所需的token值,長度爲32位,有須要的請聯繫qq951263019申請
}
header = {‘Content-Type’: ‘application/json’} # 協議頭
return requests.post(url, data=json.dumps(params), headers=header).json()

def fetch_rate(sign_res, data):
header = {
‘x-sid’: sid,
‘user-Agent’: ‘MTOPSDK%2F3.1.1.7+%28Android%3B4.4.2%3BXiaomi%3BMI+6%29’,
‘x-appkey’: appKey,
‘x-ttid’: parse.quote(ttid), # 進行URL encode處理,好比@符號要轉換成%40
‘x-devid’: parse.quote(deviceId),
‘x-features’: x_features,
‘x-utdid’: parse.quote(utdid),
‘x-pv’: pv,
‘x-location’: ‘%2C’, # 若是獲取參數的時候有參數lat和lng,那這裏就是lng%2Clat,本例爲空則設置爲%2C
‘x-t’: sign_res[‘x-t’],
‘x-sign’: sign_res[‘x-sign’],
「x-mini-wua」:sign_res[「x-mini-wua」],
「x-sgext」:sign_res[‘x-sgext’],
}

return requests.get(taobao_url, headers=header).json()
1
if name == ‘main’:
sign_res = get_sign(data) # 獲取x-sign有須要的請聯繫qq951263019
print(sign_res)
rate = fetch_rate(sign_res, data)
print(rate)

技術支持:qq:516766219

相關文章
相關標籤/搜索