python脚本中post请求时出现空正文错误

python脚本中post请求时出现空正文错误,python,python-requests,Python,Python Requests,我正在尝试使用python和请求向API端点发出post请求。 端点需要令牌。我从端点处得到了令牌 向第二个端点验证发出post请求时,会出现错误,指出主体为空 import requests url = "https://authz.dinero.dk/dineroapi/oauth/token" payload = 'grant_type=password&username=****&password=****' headers = { 'Content-Type':

我正在尝试使用python和请求向API端点发出post请求。 端点需要令牌。我从端点处得到了令牌

向第二个端点验证发出post请求时,会出现错误,指出主体为空

import requests

url = "https://authz.dinero.dk/dineroapi/oauth/token"
payload = 'grant_type=password&username=****&password=****'
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Authorization': 'Basic ****'
}

response = requests.request("POST", url, headers=headers, data = payload)
r =response.json()
token = r['access_token']

url = "https://api.dinero.dk/v1/257403/contacts"
payload = {}
payload["Name"]  = "Test Name"
payload["CountryKey"] = "DK"
payload["IsPerson"] = "true"

headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer ' + token
}

response = requests.post(url, headers=headers, data = payload)
print(response.text)
这是我得到的错误:

{“code”:42,“message”:“Validation Error”,“validationErrors”:{“Body”:“Body是空的”},“languageSpecificMessages”:[{“property”:“message”,“message”:“Der er fejl i de angivne data”},{“property”:“Body”,“message”:“Body是空的”}],“errorMessageList”:[{“code”:“Body”,“message”:“Body”,“message”:“Body是空的”}]}]

这是从邮递员那里得到的相同代码。它很好用

import requests
url = "https://api.dinero.dk/v1/257403/contacts"
payload = "{\r\n  \"Name\": \"Test Name\",\r\n  \"CountryKey\": \"DK\",\r\n  \"IsPerson\": true\r\n}"
print(payload)
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer ****'
}
response = requests.request("POST", url, headers=headers, data = payload)
print(response.text.encode('utf8'))

我希望有人能解释我的代码不起作用的原因。

在第二次调用中,您希望json转储有效负载:

import json

response = requests.post(url, headers=headers, data=json.dumps(payload))

Postman已经将负载序列化为json格式的字符串。您可以对
json.dumps()执行相同的操作。

在第二次调用中,您希望json转储负载:

import json

response = requests.post(url, headers=headers, data=json.dumps(payload))

Postman已经将负载序列化为json格式的字符串。您可以对
json执行同样的操作。dumps()

请求有一个json=param,您可以使用:

response = requests.post(url, headers=headers, json=payload)

文档。

请求有一个json=param,您可以使用:

response = requests.post(url, headers=headers, json=payload)

文档。

您可能需要首先将
负载
转储为JSON字符串(
JSON.dumps(负载)
),而不是传递字典。至少这是我在这两个代码段中发现的区别。您的postman示例将负载作为JSON字符串,而您的第一个示例将负载作为dict。您可以尝试将dict作为JSON=param传递给requests.post。您可能需要先将
负载
转储为JSON字符串(
JSON.dumps(负载)
)而不是递字典。至少这是我在这两个代码段中发现的区别。您的postman示例将有效负载作为JSON字符串,而您的第一个示例将其作为dict。您可以尝试将dict作为JSON=param传递给requests.post。