# requests发送application/x-www-form-urlencoded请求数据 head = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", 'Connection': 'close'} post_url='https://api-be.ele.me/' data = parse.urlencode(post_dict) # 请求方式 content = requests.post(url=post_url, headers=head, data=data).text print('@@@@@@@@@@@@@@@@@@@@@@@@@data:') print(data) print('@@@@@@@@@@@@@@@@@@@@@@@@@post_url:') print(post_url) content = json.loads(content) print(content)
1.签名工具问题,官网给的签名工具是有问题的,如果按照那个去写始终返回20114:也就是sign验证错误(不要问我为什么知道,应为我被坑了好久,爬了两天才爬出来)
2.官方给的例子使用时会有问题(小问题)
正确的代码如下:用于生成sign
def sign1(params): # //原始参数 biz_params={} biz_params['cmd'] = params['cmd'] biz_params['source'] = params['source'] biz_params['secret'] = params['secret'] biz_params['ticket'] = params['ticket'] biz_params['version'] = 3 biz_params['encrypt'] = params['encrypt'] biz_params['timestamp'] = params['timestamp'] biz_params['body'] = params['body'] params_list = [] # //sort排序后的参数 params_key = sorted(biz_params.keys()) for key in params_key: params_list.append(key + "=" + str(biz_params[key])) # //用&拼接成字符串 source_str = "&".join(params_list) # //md5 32位 return hashlib.md5(source_str.encode(encoding='UTF-8')).hexdigest().upper()
为了便于使用封装了一个函数
def sendparams(cmd='shop.get',source='*********',secret='***************'): time_temp='1647830954'#int(time.time())#时间戳 ticket_temp='BF46EC33-67DB-4006-8D03-4866FB517EFD'#生成ticket body_temp={ "shop_id":"***************" } params={} params['cmd'] = cmd params['source'] =source params['secret'] =secret params['ticket'] = ticket_temp params['version'] = 3 params['encrypt'] = 'aes' params['timestamp'] = str(time_temp) params['body'] = body_temp params['access_token']='' print('@@@@@@@@@@@@@@@@@@@@@params参数') print(params) sign_temp=sign1(params)#获取token值 print('@@@@@@@@@@@@@@@@@@@@@签名结果') print(sign_temp) # 最终提交的参数 post_dict={} post_dict.update({ 'cmd':params['cmd'], 'timestamp':params['timestamp'], 'version':params['version'], 'ticket':params['ticket'], 'source':params['source'], 'sign':sign_temp, 'body':params['body'], 'encrypt':'aes' }) # requests发送application/x-www-form-urlencoded请求数据 head = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", 'Connection': 'close'} post_url='https://api-be.ele.me/' data = parse.urlencode(post_dict) # 请求方式 content = requests.post(url=post_url, headers=head, data=data).text print('@@@@@@@@@@@@@@@@@@@@@@@@@data:') print(data) print('@@@@@@@@@@@@@@@@@@@@@@@@@post_url:') print(post_url) content = json.loads(content) print(content) return content
最后输入参数调用它:
def ykyd_elm_gaikuncun(): content=sendparams('shop.get','276683333','**************') return content
结果如图: