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

发布于 2022-09-12 02:58:02 字数 3148 浏览 35 评论 0

问题描述

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


微信截图_20200528163248.png
使用同样的请求信息,用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和自己代码上的请求信息是一摸一样的,却不知为何得到的数据却不一样,鄙人愚昧,还望大佬指点,十分感谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鹿港小镇 2022-09-19 02:58:02

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

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

短暂陪伴 2022-09-19 02:58:02

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文