领取资料,咨询答疑,请➕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