Requests教程-20-sign签名认证

领取资料,咨询答疑,请➕wei:  June__Go

上一小节中,我们学习了requests的token认证方法,本小节我们讲解一下requests的sign签名认证。

在进行接口调用时,一般会要求进行签名操作,以确保接口的安全性和完整性。针对不同的接口,签名操作可能会有所不同。

什么是接口sign签名

接口sign签名是一种对接口参数进行加密的操作,以确保接口请求的合法性和安全性。签名操作一般会涉及到一些预设的规则和密钥,这样才能保证接口请求的正确性。对于不同的接口,签名规则可能会有所不同,需要根据实际情况进行调整。

Python 对接口sign签名的具体操作

步骤一:获取接口参数

首先,我们需要获取接口所需要的参数。通常,这些参数会包含在一个字典(dictionary)中,键值对表示参数名和参数值。例如,接口需要获取用户的用户名和密码,可以如下定义参数:

params = {
    "username": "john",
    "password": "123456"
}

步骤二:排序参数

接下来,我们需要对参数进行排序。排序的目的是为了保证参数的顺序一致,避免在不同的环境下出现不同的签名结果。可以使用 Python 的 sorted 函数进行排序,将参数字典按照键的字母顺序进行排序:

sorted_params = sorted(params.items(), key=lambda x: x[0])

步骤三:拼接参数字符串

在排序后的参数列表中,我们需要将每个参数拼接成一个字符串。可以使用 Python 的字符串拼接操作来实现:

param_str = "&".join([f"{key}={value}" for key, value in sorted_params])

步骤四:添加密钥

接下来,我们需要将拼接好的参数字符串和密钥进行组合。这可以通过将参数字符串和密钥使用某种特定的算法进行加密来实现。具体的加密算法和密钥根据接口的要求而定。

假设我们使用的加密算法是 MD5,密钥是 secret_key,那么可以这样进行签名:

import hashlib

secret_key = "123456"
sign_str = param_str + secret_key
sign = hashlib.md5(sign_str.encode()).hexdigest()

步骤五:添加签名参数

签名操作完成后,我们需要将签名结果添加到参数字典中,作为一个新的参数传递给接口。可以使用 Python 的字典操作来实现:

params["sign"] = sign

步骤六:发送请求

接口签名操作完成后,我们可以使用 Python 的请求库(例如 requests)发送请求。根据接口要求选择适当的请求方法和地址,将签名后的参数字典传递给请求方法发送请求:

import requests

url = "http://api.example.com"
response = requests.get(url, params=params)
print(response.json())

示例

假设我们需要对一个获取用户信息的接口进行签名操作。该接口的地址为 http://api.example.com/user/info,请求方法为 GET,接口需要的参数有 timestamp(时间戳),user_id(用户ID),sign(签名),其中 timestamp 和 user_id 需要参与签名。

具体的签名规则如下:
1. 将 timestamp和user_id 按照字母顺序拼接成一个字符串,以 & 连接,如 timestamp=1625230569&user_id=12345。
2. 将拼接好的字符串和密钥 secret_key 进行组合。
3. 使用 MD5 算法对组合后的字符串进行加密,得到签名。

我们可以使用以下代码实现接口的 sign 签名操作,并发送请求:

import hashlib
import requests

url = "http://api.example.com/user/info"
secret_key = "123456"

# 获取接口参数
params = {
    "timestamp": "1625230569",
    "user_id": "12345"
}

# 排序参数
sorted_params = sorted(params.items(), key=lambda x: x[0])

# 拼接参数字符串
param_str = "&".join([f"{key}={value}" for key, value in sorted_params])

# 添加密钥
sign_str = param_str + secret_key

# 签名
sign = hashlib.md5(sign_str.encode()).hexdigest()

# 添加签名参数
params["sign"] = sign

# 发送请求
response = requests.get(url, params=params)
print(response.json())

运行结果将返回获取到的用户信息。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!领取资料,咨询答疑,请➕wei:  June__Go

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/496818.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot实现课程作业管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现课程作业管理系统演示 摘要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,课程作业管理系统当然也不能排除在外。课程作业管理系统是以实际运用为开发背景…

项目实战:电影评论情感分析系统

目录 1.引言 2.数据获取与预处理 3.构建文本分类模型(使用LSTM) 4.结果评估与模型优化 4.2.结果评估 4.2.模型优化 5.总结 1.引言 在本篇文章中,将通过一个完整的项目实战来演示如何使用Python构建一个电影评论情感分析系统。涵盖从数…

OSCP靶场--pyLoader

OSCP靶场–pyLoader 考点(信息收集CVE-2023-0297) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV 192.168.178.26 --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-28 09:14 EDT Nmap scan report for 192.168.178.26 Host is up…

二分图

数据结构、算法总述:数据结构/算法 C/C-CSDN博客 二分图:节点由两个集合组成,且两个集合内部没有边的图。换言之,存在一种方案,将节点划分成满足以上性质的两个集合。 染色法 目的:验证给定的二分图是否可…

房间采光不好怎么改造?这里有6个实用的解决方案!福州中宅装饰,福州装修

当装修中遇到房间采光不好的问题,可以从以下几个方面来解决: ①引入自然光源 尽可能减少光线阻碍物,例如可以考虑打通一些非承重墙,扩大窗户的面积,让阳光直接穿过阳台照射到室内。同时,也可以考虑在某些没…

YOLOV8逐步分解(2)_DetectionTrainer类初始化过程

接上篇文章yolov8逐步分解(1)--默认参数&超参配置文件加载继续讲解。 1. 默认配置文件加载完成后,创建对象trainer时,需要从默认配置中获取类DetectionTrainer初始化所需的参数args,如下所示 def train(cfgDEFAULT_CFG, use_pythonFalse…

17.注释和关键字

文章目录 一、 注释二、关键字class关键字 我们之前写的HelloWorld案例写的比较简单,但随着课程渐渐深入,当我们写一些比较难的代码时,在刚开始写完时,你知道这段代码是什么意思,但是等过了几天,再次看这段…

图片标注编辑平台搭建系列教程(3)——画布拖拽、缩放实现

简介 标注平台很关键的一点,对于整个图片为底图的画布,需要支持缩放、拖拽,并且无论画布位置在哪里,大小如何,所有绘制的点、线、面的坐标都是相对于图片左上角的,并且,拖拽、缩放,…

从零开始学习在VUE3中使用canvas(六):线条样式(线条宽度lineWidth,线条端点样式lineCap)

一、线条宽度lineWidth 1.1简介 值为一个数字 const ctx canvas.getContext("2d"); ctx.lineWidth 6; 1.2效果展示 1.3全部代码 <template><div class"canvasPage"><!-- 写一个canvas标签 --><canvas class"main" r…

图像处理与视觉感知---期末复习重点(5)

文章目录 一、膨胀与腐蚀1.1 膨胀1.2 腐蚀 二、开操作与闭操作 一、膨胀与腐蚀 1.1 膨胀 1. 集合 A A A 被集合 B B B 膨胀&#xff0c;定义式如下。其中集合 B B B 也称为结构元素&#xff1b; ( B ^ ) z (\hat{B})z (B^)z 表示 B B B 的反射平移 z z z 后得到的新集合。…

冥想打坐睡觉功法

睡觉把手机放远一点&#xff0c;有电磁辐射&#xff0c;我把睡觉功法交给你&#xff0c;这样就可以睡好了。

55、Qt/事件机制相关学习20240326

一、代码实现设置闹钟&#xff0c;到时间后语音提醒用户。示意图如下&#xff1a; 代码&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), speecher(new QTextToSpeech(t…

C++超市商品管理系统

一、简要介绍 1.本项目为面向对象程序设计的大作业&#xff0c;基于Qt creator进行开发&#xff0c;Qt框架版本6.4.1&#xff0c;编译环境MINGW 11.2.0。 2.项目结构简介&#xff1a;关于系统逻辑部分的代码的头文件在head文件夹中&#xff0c;源文件在s文件夹中。与图形界面…

权限提升-Win系统权限提升篇AD内网域控NetLogonADCSPACKDCCVE漏洞

知识点 1、WIN-域内用户到AD域控-CVE-2014-6324 2、WIN-域内用户到AD域控-CVE-2020-1472 3、WIN-域内用户到AD域控-CVE-2021-42287 4、WIN-域内用户到AD域控-CVE-2022-26923 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权…

Git命令上传本地项目至github

记录如何创建个人仓库并上传已有代码至github in MacOS环境 0. 首先下载git 方法很多 这里就不介绍了 1. Github Create a new repository 先在github上创建一个空仓库&#xff0c;用于一会儿链接项目文件&#xff0c;按照自己的需求设置name和是否private 2.push an exis…

指针数组的有趣程序【C语言】

文章目录 指针数组的有趣程序指针数组是什么&#xff1f;指针数组的魅力指针数组的应用示例&#xff1a;命令行计算器有趣的颜色打印 结语 指针数组的有趣程序 在C语言的世界里&#xff0c;指针是一种强大的工具&#xff0c;它不仅能够指向变量&#xff0c;还能指向数组&#…

如何利用OpenCV4.9离散傅里叶变换

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:如何利用OpenCV4.9 更改图像的对比度和亮度 下一篇:OpenCV 如何使用 XML 和 YAML 文件的文件输入和输出 目标 我们将寻求以下问题的答案&#xff1a; 什么是傅里叶变换&#xff0c;为什…

《数据结构学习笔记---第五篇》---链表OJ练习下

step1:思路分析 1.实现复制&#xff0c;且是两个独立的复制&#xff0c;我们必须要理清指针之间的逻辑&#xff0c;注意random的新指针要链接到复制体的后面。 2.我们先完成对于结点的复制&#xff0c;并将复制后的结点放在原节点的后面&#xff0c;并链接。 3.完成random结点…

黑马鸿蒙笔记1

这里与前端类似。

斜率优化dp 笔记

任务安排1 有 N 个任务排成一个序列在一台机器上等待执行&#xff0c;它们的顺序不得改变。 机器会把这 N 个任务分成若干批&#xff0c;每一批包含连续的若干个任务。 从时刻 00 开始&#xff0c;任务被分批加工&#xff0c;执行第 i 个任务所需的时间是 Ti。 另外&#x…