王帅博· 2022-07-05 17:02 采纳率: 50%
浏览 1033
已结题

postman提交请求成功,导出为python代码就报错500

困扰我2,3天的问题,求大拿指教,测试接口工作中,我用postman提交了一个请求,请求成功;但是当我生成python代码后,运行总是报错,返回500,msg是数据不存在,试了很多方法,请求参数装换为json都不行。附图如下:
header:

img


body:

img

请求结果:

img

之后我生成python代码:

img

img


在pycharm里面运行,报错如下:

img

img

img

我自己已经尝试了很多方式,比如data=payload改为json=payload;把参数格式从字典改为json字符串,都不行,只有请同行们支支招了。

  • 写回答

23条回答 默认 最新

  • eq0284 2022-07-12 16:49
    关注
    获得8.00元问题酬金

    先说一下requests的json=还有data=的区别:

    一、JSON

    1.使用json参数,不管报文是str类型,还是dict类型,如果不指定headers中content-type的类型,默认是:application/json,str报文必须是json字符串。

    二、DATA

    1.使用data参数,报文是dict类型,如果不指定headers中content-type的类型,默认application/x-www-form-urlencoded,相当于普通form表单提交的形式,会将表单内的数据转换成键值对,此时数据可以从request.POST里面获取,而request.body的内容则为a=1&b=2的这种键值对形式。

    注意:即使指定content-type=application/json,request.body的值也是类似于a=1&b=2,所以并不能用json.loads(request.body.decode())得到想要的值。

    1. 使用data参数,报文是str类型,如果不指定headers中content-type的类型,默认application/json,str不是必须json字符串。

    综上所述,两种参数的使用情况:

    用data参数提交数据时,request.body的内容则为a=1&b=2的这种形式,用json参数提交数据时,request.body的内容则为'{"a": 1, "b": 2}'的这种形式

    所以,postman生成的代码就不对,由于请求是application/json,所以一开始就应该是json=,同时将payload的所有东西以dict类型直接给requests的json参数

    payload={'name':
                     {"data":
                          {"DWMC":"","WiHI":"","WH2":"","WH3":"",
                            "wH4":"m","DWLB":"","R0":"2022-07-05","NR4":"2","JTT":"2.测试07053",
                            "RQ2":"2022-07-0500:00:00","BJCD0s":"阿飞","RQ3":"2022-07-0500:00:00",
                            "SORT":"99","CRT_LEVEL":"0","CRT_COMPANYID":"610001","STATUS":"1",
                            "ISDELETED":"0","DATA_VER":"1","ZGDINMC":""
                            ,"ZGDWID":"610001",
                            "NR3":"3","XFWFXW":"9,10,11","wFX":"2.-",
                            "RWID":"6100003667","rwwsszid":"128","isFlws":True,"runId":"6"
                           }
                      }
                   }
        session = requests.session()
        session.headers = headers
        # 向测试站点发起请求
        response = session.post("http://114.242.31.120:1888/api/blade-system/usual", json=payload)
    
    

    url以及headers还有payload你改成自己的,如果有问题再联系我。
    望采纳,谢谢

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月13日
  • 赞助了问题酬金50元 7月7日
  • 赞助了问题酬金20元 7月7日
  • 赞助了问题酬金20元 7月7日
  • 展开全部

悬赏问题

  • ¥15 机器学习教材中的例题询问
  • ¥15 求.net core 几款免费的pdf编辑器
  • ¥20 SQL server表计算问题
  • ¥15 C# P/Invoke的效率问题
  • ¥20 thinkphp适配人大金仓问题
  • ¥20 Oracle替换.dbf文件后无法连接,如何解决?(相关搜索:数据库|死循环)
  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传