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字符串,都不行,只有请同行们支支招了。

先说一下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你改成自己的,如果有问题再联系我。
望采纳,谢谢

img


都是用双引号试试

请求方式 form-data, 请求参数 name

应该是系统拒绝了你,采用代理试试

代码转的是Python - Requests吗?试试http.client呢

img

解决了么

从图上请求看是有返回数据的,我建议是从后端debug进行排除问题。假如controller可以进,但request数据没有接收到,那大多就是请求参数格式不对的原因了。若是没有进入controller,那有可能是拦截器之类的原因,找到拦截器确认拦截器的作用就可以找到问题所在。

你这个消防监督管理系统已经上线了吗?如果没有的话给个测试账号可以帮你一起研究一下,从你现在提供的信息看请求貌似是成功的,code 500不是通常意义上的http请求的那个500,而是系统自定义了一个500的code,按照其他提示,可能性最大的还是你提供的参数格式有问题,

img


按照requests.post的定义,用data或者json都可以上传参数,

data = {'name':{"data":{...},"runId":"6100029058"}}
response = requests.post(url=url, data=data, headers=headers)
#内部的参数自行补齐

解决了吗

我不是太懂Python,希望这个网址能帮助你
https://blog.csdn.net/weixin_44305115/article/details/112934610

抓包对比一下就知道了,一般是缺参数

name的值是字典,而你在python请求中变成了字符串啦

报500是内部报错了,跟请求没有关系了,调试一下看看吧

你这个问题主要是Python+requests接口报错返回500(后端没进行相关校验,导致直接返回500)
在于传递的参数需要转义,如python中字典中带有列表的格式,[]传输过程中无法传输成功。用转义或者str()即可。开发过程中,大多数情况下request中data需要改为json格式。

看一下你postman的请求参数,这种估计是参数格式的问题

前两天做java项目也遇到过类似的问题,在swagger和postman测接口有数据,app调接口就是报错。我这个的原因是数据库连接池的连接数量达到上限了,把所有需要加事务注解的地方加@Transaction(rollbackFor=Exception.class),然后重启服务和redie解决的,希望我的能对你有帮助

将headers中的content-type改成"Content-Type " : "multipart/form-data",试试

大概率是没有自定义请求头,导致
看接口是要auth登录后使用授权的Token,请求没有使用token导致服务器拒绝
建议使用session来完成

import json

import requests
session = requests.Session()
headers = {
            'User-Agent': 'Apipost client Runtime/+https://www.apipost.cn/',
            'Authorization': 'Basic ' + token,
            'Content-Type': 'application/x-www-form-urlencoded',
        }
        # user login
response_login = session.post(url + '/auth/realms/dingcloud/protocol/openid-connect/token',
                                           headers=headers,
                                           data=data1)


瞅瞅这个,你在postman传的数据是from-data格式,所有你需要先装入字典然后转换
https://blog.csdn.net/xy_best_/article/details/84573087

添加参数 ensure_ascii=False, cls=JSONEncoder试试:
requests.post(url='.com',json=json.dumps(data, ensure_ascii=False, cls=JSONEncoder), headers=headers)

img

img

这样选,然后再导出python代码

一般这种直接导出成Python requests是可以执行的
更大可能性是你的编辑器或者环境是否有了其他问题,比如系统代理或者其它因素。

解决方法
1、注意自身代理,有的话关掉,然后postman执行,导出python执行
2、尝试不用编辑器,直接在cmd窗口 python3 main.py
如果还有其他问题的话,需要你发一下你的Python代码看下是否有具体的格式或其他问题。


如有问题及时沟通

header 里 加加一项 'User-Agent'(用户代理) 是什么 试试?
比如:'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.66 Safari/537.36 Edg/103.0.1264.44"
可以发一下报错的代码吗?就是Traceback (most recent call last): 那几行;或者是我理解错了,python代码可以正常运行,只是网站返回的结果不是200?