想获得一个接口的数据,同样的请求参数在postman中和自己请求代码中却得到不一样的数据?

问题描述

尝试请求一个post接口,在postman中录入完整header信息和body信息,由于该接口 content-typeapplication/x-www-form-urlencoded ,所以postman请求body勾选 x-www-form-urlencoded ,获得了完整的数据。


想获得一个接口的数据,同样的请求参数在postman中和自己请求代码中却得到不一样的数据?
使用同样的请求信息,用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&region_id=1000310100&region_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和自己代码上的请求信息是一摸一样的,却不知为何得到的数据却不一样,鄙人愚昧,还望大佬指点,十分感谢!


回答:

最可能的原因是你的请求头不对,仔细检查一下请求头。

ps:postman 是可以生成请求代码的,你用 postman 生成的请求代码试一下。


回答:

你倒是说说看怎么个缺失法

以上是 想获得一个接口的数据,同样的请求参数在postman中和自己请求代码中却得到不一样的数据? 的全部内容, 来源链接: utcz.com/p/937843.html

回到顶部