第12章 day13 关于json请求体

第1知识点:关于json请求体
第2知识点:关于精准请求(如何排除干扰请求)
第3知识点:入口定位
一、关键字方法
(1) 方法关键字
encrypt :加密入口
decrypt :解密入口
JSON.stringify:加密入口
JSON.parse:解密入口
(2) key关键字
(3) headers关键字 xxx()
(4) 拦截器关键字
interceptors.request.use
interceptors.response.use
(5) 路径关键字

第4知识点:断点与断点调试
普通断点
XHR断点
条件断点
日志断点
脚本断点

import time
import base64
import requests
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from hashlib import md5
import json

headers = {

}

# 生成sign值
def get_sign(data):
    # (1) 剔除空值
    new_data = {}
    for key, val in data.items():
        # print(key, val)
        if val == "" or val == 0:
            continue
        new_data[key] = val

    # print(new_data)

    # (2) 排序
    s = new_data.items()
    # print(s)
    ret = sorted(s, key=lambda item: item[0])
    # print(ret)
    s2 = ""
    for key, val in ret:
        s2 += key + str(val)

    # print(s2)
    ra = "B3978D054A72A7002063637CCDF6B2E5"

    n = ra + s2

    # (3) 生成md5值
    m = md5()
    m.update(n.encode())
    sign = m.hexdigest()
    # print(sign)  # 4145a19057c83fd6a99163d0bd2f5e88

    return sign


def decrypt(res):
    # 基于Python做出AES的解密
    # (1) base64解码
    base64_encrypt_data = res.json().get("Data")
    # print(base64_encrypt_data)

    encrypt_data = base64.b64decode(base64_encrypt_data)
    # print(encrypt_data)

    # (2) aes解密
    k = 'EB444973714E4A40876CE66BE45D5930'.encode()
    i = 'B5A8904209931867'.encode()
    aes = AES.new(key=k, mode=AES.MODE_CBC, iv=i)
    data = aes.decrypt(encrypt_data)
    data = unpad(data, 16)
    data = json.loads(data)
    print(data)

    for i in data["Table"]:
        print(i.get("NAME"))


def main():
    for i in range(1,10):
        json_data = {
            "ts": int(time.time() * 1000),
            "pageNo": i,
            "pageSize": 20,
            "total": 2798,
            "AREACODE": "",
            "M_PROJECT_TYPE": "",
            "KIND": "GCJS",
            "GGTYPE": "1",
            "PROTYPE": "",
            "timeType": "6",
            "BeginTime": "2024-09-29 00:00:00",
            "EndTime": "2025-03-29 23:59:59",
            "createTime": ""
        }
        sign = get_sign(json_data)

        headers["portal-sign"] = sign

        response = requests.post('https://ggzyfw.fujian.gov.cn/FwPortalApi/Trade/TradeInfo', headers=headers,
                                 json=json_data)
        # 解密
        decrypt(response)
        time.sleep(1)


if __name__ == '__main__':
    main()

posted @ 2025-09-25 19:29  凫弥  阅读(17)  评论(0)    收藏  举报