实现过程
参数
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)
到此实现线上验签
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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)