import requests import json import time from hashlib import sha1 from urllib.parse import urlencode import logging # 配置日志 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') def reservation_paged_list(): """ 获取预约分页列表的数据。 本函数通过发送POST请求到指定的URL,获取预约分页列表的数据。 它首先构造请求所需的URL、数据参数和签名,然后发送请求并处理响应。 """ # 定义API的URL url = "https://pmsapi.demo.dasiot.cn/v4/api/reservation/reservationPagedList" # 获取当前时间戳,用于请求签名 timestamp = int(time.time() * 1000) # 定义请求体的数据参数 data_map = { "pageIndex": 1, "pageSize": 1000 } # 创建签名所用的字典,包含数据参数和时间戳 sign_map = data_map.copy() sign_map["timestamp"] = timestamp # 拼接sign参数 data_str = urlencode(sign_map).lower() string_sign_temp = f"{data_str}&key=2cc2e7-b027-41bb-af4b-f6" # 对stringSignTemp进行SHA-1运算并转为大写,生成最终的签名 sign = sha1(string_sign_temp.encode()).hexdigest().upper() # 定义请求头,包含时间戳和签名 headers = { "timestamp": str(timestamp), "sign": sign } # 记录日志,包括签名、请求路径、请求头和请求体参数 logging.info(f"获取sign:{sign}") logging.info(f"分页查询预约列表请求路径:{url}") logging.info(f"分页查询预约列表请求头:{headers}") logging.info(f"分页查询预约列表请求体参数:{data_map}") try: # 发送POST请求 response = requests.post(url, json=data_map, headers=headers) # 检查响应状态码,如果状态码表示请求有错误,则抛出异常 response.raise_for_status() # 获取响应体内容 body_str = response.text # 记录响应日志 logging.info(f"分页查询预约列表返回参数:{body_str}") except requests.exceptions.RequestException as e: # 如果请求失败,记录错误日志 logging.error(f"请求失败:{e}") if __name__ == "__main__": reservation_paged_list()