数据必须是对象python请求库
错误: 在尝试运行上述代码时,我不断收到错误“additionalInfo必须是一个对象”。有人能帮我找出原因吗。我还试着传入json对象等,但仍然不起作用。当additionalInfo字段为空时,它似乎只给我一个2xx响应,如下面的代码所示数据必须是对象python请求库,python,python-requests,http-post,Python,Python Requests,Http Post,错误: 在尝试运行上述代码时,我不断收到错误“additionalInfo必须是一个对象”。有人能帮我找出原因吗。我还试着传入json对象等,但仍然不起作用。当additionalInfo字段为空时,它似乎只给我一个2xx响应,如下面的代码所示 response = requests.post( url=bid_url, headers={'Authorization': my_api_key}, data={ "type": "
response = requests.post(
url=bid_url,
headers={'Authorization': my_api_key},
data={
"type": "open",
"initiatorId": "ecc52cc1-a3e4-4037-a80f-62d3799645f4",
"dateCreated": datetime.now(),
"subjectId": "8a921487-859f-4931-8743-f69c38f91b25",
"additionalInfo": {
"someInfo": {
"abcd":"123",
"efgh":"456"
}
}
}
)
您可以尝试先将
datetime.datetime.now()
转换为字符串,以避免获得TypeError:datetime类型的对象不可JSON序列化
,然后直接使用JSON
参数传递数据
查看差异,特别是与additionalInfo
数据的差异:
>response=requests.post(
…url=https://httpbin.org/post',
…头={'Authorization':'abc'},
…数据={
…“类型”:“打开”,
…“启动器ID”:“ecc52cc1-a3e4-4037-a80f-62d3799645f4”,
…“dateCreated”:datetime.datetime.now().strftime(“%Y-%m-%d%H:%m:%S”),
…“主体”:“8a921487-859f-4931-8743-f69c38f91b25”,
…“其他信息”:{
…“someInfo”:{
…“abcd”:“123”,
…“efgh”:“456”
... }
... }
... }
... )
>>>打印(response.text)
{
“args”:{},
“数据”:“,
“文件”:{},
“表格”:{
“additionalInfo”:“someInfo”,
“dateCreated”:“2021-04-22 09:56:24”,
“启动器ID”:“ECC52C1-a3e4-4037-a80f-62d3799645f4”,
“主体”:“8a921487-859f-4931-8743-f69c38f91b25”,
“类型”:“打开”
},
“标题”:{
“接受”:“*/*”,
“接受编码”:“gzip,deflate”,
“授权”:“abc”,
“内容长度”:“165”,
“内容类型”:“应用程序/x-www-form-urlencoded”,
“主机”:“httpbin.org”,
“用户代理”:“python请求/2.25.1”,
“X-Amzn-Trace-Id”:“根=1-60812c28-4b724efe3ed5ae33281c1b5e”
},
“json”:null,
“来源”:“62.216.206.48”,
“url”:”https://httpbin.org/post"
}
>数据={
…“类型”:“打开”,
…“启动器ID”:“ecc52cc1-a3e4-4037-a80f-62d3799645f4”,
…“dateCreated”:datetime.datetime.now().strftime(“%Y-%m-%d%H:%m:%S”),
…“主体”:“8a921487-859f-4931-8743-f69c38f91b25”,
…“其他信息”:{
…“someInfo”:{
…“abcd”:“123”,
…“efgh”:“456”
... }
... }
... }
>>>response=requests.post(
…url=https://httpbin.org/post',
…头={'Authorization':'abc'},
…json=数据)
>>>打印(response.text)
{
“args”:{},
“数据”:“{”类型\“:”打开\“,”发起人\“:”ecc52cc1-a3e4-4037-a80f-62d3799645f4 \“,”创建日期\“:”2021-04-22 09:57:44 \“,”主体\“:”8a921487-859f-4931-8743-f69c38f91b25 \“,”附加信息\“,”某些信息\“:”,“{”abcd \“:”123 \“,”efgh:”456 \}”,
“文件”:{},
“形式”:{},
“标题”:{
“接受”:“*/*”,
“接受编码”:“gzip,deflate”,
“授权”:“abc”,
“内容长度”:“226”,
“内容类型”:“应用程序/json”,
“主机”:“httpbin.org”,
“用户代理”:“python请求/2.25.1”,
“X-Amzn-Trace-Id”:“根=1-60812c84-58af3b816a5d3fc26cf5f37f”
},
“json”:{
“其他信息”:{
“someInfo”:{
“abcd”:“123”,
“efgh”:“456”
}
},
“dateCreated”:“2021-04-22 09:57:44”,
“启动器ID”:“ECC52C1-a3e4-4037-a80f-62d3799645f4”,
“主体”:“8a921487-859f-4931-8743-f69c38f91b25”,
“类型”:“打开”
},
“来源”:“62.216.206.48”,
“url”:”https://httpbin.org/post"
}
使用strftime帮助解决了我的问题,而且我不得不将数据类型从response更改为json。对于将来访问此网站的任何人,请注意:
response = requests.post(
url=bid_url,
headers={'Authorization': my_api_key},
data={
"type": "open",
"initiatorId": "ecc52cc1-a3e4-4037-a80f-62d3799645f4",
"dateCreated": datetime.now(),
"subjectId": "8a921487-859f-4931-8743-f69c38f91b25",
"additionalInfo": {}
}
)
非常感谢所有帮助过我的人,如果您能包含堆栈跟踪以查看错误的起始位置,那将是非常棒的。谢谢可能是“datetime.now(),”吗?尝试从转换为str。您可以将其用于实际的服务器错误。没有堆栈跟踪。
response = requests.post(
url=bid_url,
headers={'Authorization': my_api_key},
json={
"type": "open",
"initiatorId": "ecc52cc1-a3e4-4037-a80f-62d3799645f4",
"dateCreated": datetime.now().strftime('%Y-%m-%dT%H:%M:%S.%f'),
"subjectId": "8a921487-859f-4931-8743-f69c38f91b25",
"additionalInfo": {
"BidInfo": {
"abcd":"123",
"efgh":"456"
}
}
}
)