我正在尝试重新创建此page
上提供的示例当然我正在使用我的有效数据更改client_id,密码,信用卡等...(我没有按原样复制粘贴示例)。
您可以看到我的完整代码here(我使用 * ** 隐藏了合理的数据。)
我可以毫无问题地获得令牌,但是当我发布付款请求时,我得到了回复:
In [11]: r2.text
Out[11]: u'{"name":"MALFORMED_REQUEST","message":"The request JSON is not well formed.","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#MALFORMED_REQUEST","debug_id":"*************"}'
我真的不明白为什么它说我的json格式不正确:( 有人可以帮帮我吗?谢谢!
答案 0 :(得分:7)
这是你的代码:
post_data = json.loads(s)
r2 = requests.post('https://api.sandbox.paypal.com/v1/payments/payment', headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer ' + token},
data = post_data)
您有一个JSON字符串s
,您可以将其转换为Python对象并将其发布到服务器。正如the docs所述,如果您将dict
作为data
传递,则会进行表单编码,而不是JSON编码。如果您想要任何其他格式的数据,您应该自己编码,如示例所示:
>>> r = requests.post(url, data=json.dumps(payload))
由于您已经拥有JSON编码的字符串s
,因此您可以发送该字符串。
答案 1 :(得分:2)
你完全误解了应该传递给requests.post()
方法的内容。 http://docs.python-requests.org/en/latest/user/quickstart.html#more-complicated-post-requests
您正在尝试传递Python对象而不是JSON。 @ Janne的答案是一个选项,但是将数据构建为Python对象更方便,然后使用json.dumps(obj)
并将结果传递给requests.post()
。