参数由公共参数和接口参数构成,公共参数是每个接口都要带的,接口参数是根据接口不同而不同
公共参数如下:
接口参数:
签名生成的通用步骤如下( 以HMAC算法举例 ):
第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特别注意以下重要规则:
◆ 参数名ASCII码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名,且请求报文中也不要带此参数;
◆ 参数名区分大小写;
第二步,对stringA对进行 HMAC 运算,得到hmac的值后再做Base64编码,最后得到sign值signature。
◆ key由BJCA颁发给用户;
举例:
假设传送的参数如下:
appId: 10002
deviceId: 1000
mobile: 18611525990
signAlgo: HmacSHA256
第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:
stringA=“appId=1000&deviceId=1000&mobile =18611525990&signAlgo=HMAC”;
第二步:计算sign:
stringSignTemp=hmac(stringA,key)
signature=Base64(stringSignTemp)
Python脚本如下:
import requests
import json,hmac,base64
from hashlib import sha256
header = {'content-type':'application/json'}
url = r'http://ip:port/urlpath'
reqBody = {
"appId": "APP_60924EAB150441E79280F240769C27D2",
"deviceId": "DEV_C42F9FCEE6304F64A14C8016F78663AD",
"signAlgo": "HMAC",
"bussinessId": "{{bussinessId}}",
"version": "1.0",
"name": "xxxxx",
"idNumber": "xxxx",
"mobile":"xxx"
}
#对参数进行排序,
str1 = ''
s1 = sorted(list(reqBody.keys()))
for i in s1:
str1 = f'{str1}&{i}={reqBody[i]}'
#s2为最终排序结果
s2 = str1[1:].encode('utf-8')
secret = 'mLA6Aoyx7KzPaEtri6X1qYYCYZXvSxIV'.encode('utf-8')
#进行hmac
x = hmac.new(secret,s2,digestmod=sha256).digest()
#进行base64编码
signature = base64.b64encode(x)
reqBody['signature'] = signature.decode('utf-8')
res = requests.post(url=url,headers=header,data=json.dumps(reqBody))
print(res.json())
查看更多关于python实现接口测试中需要对请求参数进行hmac的运算的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did169693