勤杂工

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

实现过程

参数

timestamp当前时间戳(毫秒级)

noncestr(8位随机数)

needSign(是否需要签名验证)bool类型值

appSignKey 签名秘钥,服务端约定的固定值

如何获取签名

1在请求接口时,需要将接口参数和上述参数按照拼音顺序倒序排列

2排序完成后,将所有参数拼接成字符串类型

3拼接完成放入SHA1中加密,得到sign值

4删除参数中的秘钥(appSignKey ),在参数中添加sign值,重新做参数拼接成字符串

5接口请求中放入4步骤新拼接的参数

步骤实现过程

排序拼接算法:

 

def sort(dict):
d1 = sorted(dict.items(), key=lambda x: x[0])
list_2 = []
for i in range(len(d1)):
k, v = d1[i]
if i == 0:
str1 = k + "=" + v
list_2.append(str1)
else:
str2 = "&" + str(k) + "=" + str(v)
list_2.append(str2)
result= ''.join([str(i) for i in list_2])
return result
删除参数拼接算法
def create_dict(**dict):
t=time.time()
#取时间戳
timestamp=int((t * 1000))
#8位随机数
# noncestr=random.randint(10000000,99999999)
noncestr=88888888
#签名参数
needSign ="True"
#服务端约定的秘钥参数
appSignKey=""
dict["appSignKey"]=appSignKey
dict["needSign"]=needSign
dict["noncestr"]=noncestr
dict["timestamp"]=timestamp
content = sort(dict)
# 获取签名值
sign = hashlib.sha1(bytes(content, encoding='utf-8')).hexdigest()
# 删除词典中的签名秘钥
del (dict["appSignKey"])
# 增加词典中的sign值
dict["sign"] = sign
# 重新组装请求参数
content2 = sort(dict)
return content2
接口请求的使用
def get_url():
content2=create_dict( postId= "42562120", pageNum="1",pageSize="20",onlyQuality="False")
url = "https://www.dxy.cn/bbs/newweb/post/reply/list?"+content2
response = requests.get(url=url)
print(response.text)
到此实现线上验签
 
 

 

 

 

posted on   勤杂工  阅读(654)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
 
点击右上角即可分享
微信分享提示