将curl PUT转换为Python请求的问题:“解析JSON的问题”

时间:2016-06-26 01:27:52

标签: python curl github python-requests github-api

我希望将Python requests库用于create a new file in a GitHub存储库。在命令行中输入以下内容适用于我(根据需要替换LOGINTOKEN):

curl -X PUT -d '{"path": "testfile.txt", "message": "test", "content": "aGVsbG8y"}' https://api.github.com/repos/LOGIN/testrepo/contents/testfile.txt\?access_token\=TOKEN

但是在尝试对请求执行相同操作时,我一直遇到“解析JSON问题”错误(状态代码400):

data = {
    "message": "test",
    "content": "aGVsbG8y",
    "path": "testfile.txt"
}
url = "https://api.github.com/repos/LOGIN/testrepo/contents/testfile.txt?access_token={}".format(TOKEN)
response = requests.put(url, data=data)

关于我的做法有何不同?我已经检查了类似的问题,但没有找到正确的调整。谢谢!

1 个答案:

答案 0 :(得分:6)

因为只是传递data参数会自动将您的字典作为表单编码参数发送。而是将其作为JSON传递

import json
data = {
    "message": "test",
    "content": "aGVsbG8y",
    "path": "testfile.txt"
}
url = "https://api.github.com/repos/LOGIN/testrepo/contents/testfile.txt?access_token={}".format(TOKEN)
response = requests.put(url, data=json.dumps(data))

或者,如果您至少使用2.4.2版,则可以这样做:

response = requests.put(url, json=data)