想获得一个接口的数据,同样的请求参数在postman中和自己请求代码中却得到不一样的数据?
问题描述
尝试请求一个post接口,在postman中录入完整header信息和body信息,由于该接口 content-type 为 application/x-www-form-urlencoded ,所以postman请求body勾选 x-www-form-urlencoded ,获得了完整的数据。
使用同样的请求信息,用python3.5的requests模块post方法请求,用urllib的urlencode方法,将dict格式的body信息转化为包含&和=的字符串,请求得到的数据却有缺失。
以下为代码:
def get_sort_code(coordinate):
# 获取分类信息
time.sleep(random.uniform(1, 2))
sort_url = 'https://aa.bbbbb.cccc.com/weapp/v1/poi/getfilterconditions?ui=102549566®ion_id=1000310100®ion_version=1590565336789'
sort_header = {
'Host': 'aa.bbbbb.ccccc.com',
'Connection': 'keep-alive',
'Content-Length': '844',
'R2X-Referer': 'https://servicewechat.com/wxaaaaaaaaaaaa/0/page-frame.html',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat',
'content-type': 'application/x-www-form-urlencoded',
'uuid': '51d5abb8-3d66-4780-b4a7-4c67d36ee21b',
'wm-ctype': 'wxapp',
'Referer': 'https://servicewechat.com/wxaaaaaaaaaaaa/269/page-frame.html',
'Accept-Encoding': 'gzip, deflate, br'
}
sort_data = urlencode({
'wm_dtype': 'microsoft',
'wm_dversion': '7.0.9',
'wm_dplatform': 'windows',
'wm_uuid': '51d5abb8-3d66-4780-b4a7-4c67d36ee21b',
'wm_longitude': coordinate[0].replace('.', ''),
'wm_latitude': coordinate[1].replace('.', ''),
'wm_visitid': visitid,
'wm_appversion': '5.6.9',
'wm_logintoken': token,
'userToken': token,
'req_time': int(time.time() * 1000),
'waimai_sign': '/',
'wm_actual_longitude': '121270656',
'wm_actual_latitude': '31372859',
'userid': '102549566',
'user_id': '102549566',
'lch': '1007',
'optimusCode': '20',
'riskLevel': '71',
'partner': '4',
'platform': '13',
'uuid': '51d5abb8-3d66-4780-b4a7-4c67d36ee21b',
'open_id': 'oOpUI0S4KJRXuEGvVez63D3oo4k4',
'rc_app': '4',
'rc_platform': '13',
'rank_list_id': '1343c504f614d699e217c0b4a74c67d3',
'ref_list_id': '1343c50af86304e9c6d38bb83d664780',
'wm_ctype': 'wxapp'
})
print(sort_data)
print(type(sort_data))
sort_response = requests.post(sort_url, headers=sort_header, data=sort_data)
print('请求全部分类--', sort_response.status_code)
print(sort_response.content.decode())
sort_info = json.loads(sort_response.content.decode())
first_list = sort_info['data']['category_filter_list']
for first in first_list:
if first['name'] == first_sort:
for second in first['sub_category_list']:
if second['name'] == second_sort:
# 品类编码
sort_code = second['code']
# 品类店铺数
sort_num = second['quantity']
print(sort_code)
print(sort_num)
return sort_code, sort_num
反反复复
问题困扰一天,反复尝试,反复确认postman和自己代码上的请求信息是一摸一样的,却不知为何得到的数据却不一样,鄙人愚昧,还望大佬指点,十分感谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
最可能的原因是你的请求头不对,仔细检查一下请求头。
ps:postman 是可以生成请求代码的,你用 postman 生成的请求代码试一下。
你倒是说说看怎么个缺失法