Python使用requests.post发请求报data参数重复传值错误如何解决?
requests.post调用报错got multiple values for argument 'data' 原因及修复
报错原因
requests.post 方法的参数顺序为(url, data=None, json=None, headers=None, ...),第二个位置参数默认对应data参数。你的调用代码requests.post("loginUser",url, data = myobj)中:
- 给第一个位置参数
url传了值"loginUser" - 给第二个位置参数(对应
data)传了值url变量 - 又通过关键字参数显式给
data传了值myobj
等于data参数被重复赋值,所以触发类型错误。
同时代码存在逻辑问题:你提前定义了目标接口地址变量url = 'mywebsite/test.php',但调用时第一个参数传了无关的"loginUser",属于参数传递错误。
修复方法
方法1:删除多余的位置参数
如果你要请求的地址就是提前定义的url变量,直接调整调用参数即可:
import requests import json url = 'mywebsite/test.php' myobj = {"username" : "test", "password" : "1234"} myobj = json.dumps(myobj) # 去掉多余的"loginUser"参数,第一个位置参数传目标url x = requests.post(url, data = myobj) print(x.text)
方法2:使用requests内置json参数(更推荐)
requests.post原生支持json关键字参数,不需要手动调用json.dumps序列化,也不需要手动指定JSON请求头,框架会自动处理:
import requests url = 'mywebsite/test.php' myobj = {"username" : "test", "password" : "1234"} # 直接传json参数,内部自动完成序列化、请求头补充 x = requests.post(url, json = myobj) print(x.text)
如果"loginUser"是接口路径的一部分,直接修改url变量为实际的接口地址即可,例如url = 'mywebsite/loginUser'。
内容的提问来源于stack exchange,提问作者jeffinter
相关产品推荐
相关产品推荐

