Python请求的数据参数工作不正常

Python请求的数据参数工作不正常,python,post,python-requests,Python,Post,Python Requests,我正在使用请求 我正在尝试使用一些额外的标题来完成一个简单的POST请求。我不明白下面的行为 opener = requests.Session() data = {"payload" : { "id": 1, "pwd": "mypass"} headers = {"Content-Type":"application/json"} url = "https://mysite.com/login" # THIS WORKS opener.post(url, data) # THIS

我正在使用请求

我正在尝试使用一些额外的标题来完成一个简单的POST请求。我不明白下面的行为

opener = requests.Session()
data = {"payload" : { "id": 1, "pwd": "mypass"}
headers = {"Content-Type":"application/json"}
url = "https://mysite.com/login"    

# THIS WORKS
opener.post(url, data)
# THIS DOES NOT WORK
opener.post(url, json.dumps(data))

# THIS DOES NOT WORK
opener.post(url, data=data, headers=headers)
# THIS WORKS
opener.post(url, data=json.dumps(data), headers=headers)
似乎post方法通常需要一个
dict
,当我将该
dict
转换为
字符串时,该方法不起作用。我可以使用前者登录,但不能使用后者

然而,当我提供额外的头信息时,post方法的工作方式似乎与extact相反,它需要一个字符串作为数据。在服务器端,第一个版本抛出一个错误,而第二个版本使用头

这种行为的原因是什么