参数由公共参数和接口参数构成,公共参数是每个接口都要带的,接口参数是根据接口不同而不同
公共参数如下:
接口参数:
签名生成的通用步骤如下( 以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