aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c=
根据上述调用栈我们点进去看看,然后打上断点刷新继续看参数生成
这就是我们需要的加密参数
接下来就简单啦,先研究一下他的逻辑,然后想扣就扣了
从上述多次可以确定 c是个固定值,接着我们分析tre(16)
,点进去看看
可以看到就是随机取得数字和字母
接下来我们分析d
的值
从上述截图中可以看到,d
的值区分了get和其他请求
我们都看看
可以看到nre(t)
接受一个参数e并返回一个字符串t,object.keys(e)
返回对象的键数组,然后将其映射到键值对数组,其形式为 n = {n}= n={e[n]}。然后对得到的数组进行排序,并以&作为分隔符连接以形成字符串t。如果e是字符串,则首先用&进行拆分,进行排序,然后以&作为分割符连接以构成字符串t。
接着我们分析QQ()
看到这里我们就可以大致猜测一下加密啦。。。。我就直接贴答案了
可以看到,很明显就是一个sha256的加密,接下来我们测试一下加密是不是sha256
想扣代码的自己来吧!
import random
import time
import hashlib
import requests
import json
ky = "zxcvbnmlkjhgfdsaqwertyuiop0987654321QWERTYUIOPLKJHGFDSAZXCVBNM"
Fq = ky + "-@#$%^&*+!"
def get_nonce(num):
nonce = ""
for i in range(num):
yq = int(random.random() * 62)
nonce += ky[yq]
return nonce
def get_signature(params_data: dict, _nonce: str, _timestamp: int):
c = 'k8tUyS$m'
p_data = dict(sorted(params_data.items(), key=lambda k: k[0]))
p_list = []
for key, value in p_data.items():
if str(value) == "False":
value = "false"
p_list.append(f"{key}={value}")
p_str = "&".join(p_list)
enc_str = _nonce + c + p_str + str(_timestamp)
print(enc_str)
_sha256 = hashlib.sha256()
_sha256.update(enc_str.encode("utf-8"))
print(_sha256.hexdigest())
return _sha256.hexdigest()
def get_data():
url = "https://******/ggzy-portal/search/v1/items"
headers = {
'Accept': 'application/json, text/plain, */*',
'Connection': 'keep-alive',
'Content-Type': 'application/json',
'Origin': '******',
'Pragma': 'no-cache',
'Referer': '******',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.51',
'X-Dgi-Req-Nonce': '',
'X-Dgi-Req-Signature': '',
'X-Dgi-Req-Timestamp': '',
}
data = {
"type": "trading-type",
"publishStartTime": "",
"publishEndTime": "",
"siteCode": "441900",
"secondType": "A",
"projectType": "",
"thirdType": "",
"dateType": "",
"total": 0,
"pageNo": 1,
"pageSize": 10,
"openConvert": False
}
nonce = get_nonce(16)
timestamp = int(time.time() * 1000)
headers["X-Dgi-Req-Timestamp"] = str(timestamp)
headers["X-Dgi-Req-Nonce"] = nonce
headers["X-Dgi-Req-Signature"] = get_signature(params_data=data, _nonce=nonce, _timestamp=timestamp)
data = json.dumps(data, separators=(',', ':'))
response = requests.post(url, headers=headers, data=data)
print(response.text)
if __name__ == '__main__':
get_data()
注意:
如有侵权以及损害利益等问题,欢迎联系我删除