数据必须是对象python请求库

数据必须是对象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": "

错误:

在尝试运行上述代码时,我不断收到错误“additionalInfo必须是一个对象”。有人能帮我找出原因吗。我还试着传入json对象等,但仍然不起作用。当additionalInfo字段为空时,它似乎只给我一个2xx响应,如下面的代码所示

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"
        }
      }
    }
)