阿里云https原始请求
1、构造基本数据
params = {
'Format': 'JSON',
'Version': '2018-09-19', # 固定的,根据文档上的填写即可
'AccessKeyId': settings.ALI_RISK_REPORT_ACCESSKEYID, # 申请到的ackid
'SignatureMethod': 'HMAC-SHA1', # 加密方式hmac-sha1
'Timestamp': datetime.utcnow().isoformat(), # 时间戳,UTC时间
'SignatureVersion': '1.0', # 签名版本号
'SignatureNonce': str(uuid.uuid1()), # 一个随机数,建议使用uuid
'Action': 'ExecuteRequest',
'Service': '对应服务', # 对接文档上对应的服务参数名
# 如果有其他参数,直接拼接上即可
}
2、对参数进行签名
def percent_encode(encode_str):
# url编码转换
if isinstance(encode_str, bytes):
encode_str = encode_str.decode(sys.stdin.encoding)
res = parse.quote_plus(encode_str.encode('utf-8'), '')
res = res.replace('+', '%20').replace('*', '%2A').replace('%7E', '~')
return res
def _signature(self):
"""对数据签名"""
# 对基本参数(不包含sign)按照key进行排序
base = sorted(params.items(), key=lambda data: data[0])
signature_string = ''
# 对上一步排序好的字典,按照key1=value1&key2=value2...格式拼接,并且对每个key和value进行url编码
for dict_key, dict_value in base:
signature_string += '&' + self.percent_encode(dict_key) + '=' + self.percent_encode(dict_value)
# 将 '请求方式:post或者get'、'&' + '/'的url编码、上一步完成的signature_string 三部分拼接
string_to_sign = 'GET&' + self.percent_encode('/') + '&' + self.percent_encode(signature_string[1:])
# 对拼接好的字符串进行hmac-sha1加密
uri = hmac.new((settings.ALI_RISK_REPORT_ACCESSKEYSECRET+'&').encode('utf-8'), string_to_sign.encode('utf-8'),
sha1).digest()
# 对加密好的字符串再次进行base64加密,即可得到签名key
key = base64.b64encode(uri).strip()
params['Signature'] = key
3、 发送请求
url = 接口url
requests.get(url, params=params, headers={"content-type": "application/x-www-form-urlencoded"})或者requests.post(url, json=params, headers={"content-type": "application/x-www-form-urlencoded"})
后记:
如果不是必须的话,还是用阿里云的SDK的好.