【发布时间】:2017-11-28 12:08:56
【问题描述】:
我正在尝试使用 POST 方法向 API 发出 HTTP 请求。我使用的 API 旨在接收三个参数(key1、key2、key3)并返回一个 json 文件。不幸的是,当我使用 data 方法将字典传递给 API 时,我的 POST 请求似乎没有返回任何内容。这似乎很奇怪,因为当我使用 params 方法时它似乎工作。我无法理解这一点,因为这个过程似乎非常不透明(例如,我无法通过 URL 查看有效负载是如何传递到 API 的)。
我的问题:我在这里做错了什么?
使用 data 方法将参数发送到 API 的 POST 请求:
import requests
url = 'http://example.com/API.php'
payload = {
'key1': '<<Contains very long json string>>',
'key2': 5,
'key3': 0
}
print len(str(payload)) # Prints 6717
r = requests.post(url, data=payload) << Note data is used here
print r.status_code # Prints 200
print r.text # Prints empty string
使用 params 方法将参数发送到 API 的 POST 请求代码:
import requests
url = 'http://example.com/API.php'
payload = {
'key1': '<<Contains very long json string>>',
'key2': 5,
'key3': 0
}
print len(str(payload)) # Prints 6717
r = requests.post(url, params=payload) << Note here params is used here
print r.status_code # Prints 200
print r.text # Prints expected JSON results
如果您想知道为什么我想使用 data 方法而不是 params... 我正在尝试传递包含更长字符串的其他字典和 params 方法似乎没有这样做,因为我收到 ERROR 414。我希望可以通过使用 data 解决该错误。
我使用的 API 是用 PHP 编写的。
【问题讨论】:
-
API 要求请求正文采用什么编码?它会期待 JSON 或 multipart/form-data 吗?
-
对不起。目前,我对此并不完全确定,因为 API 是我的同事用 PHP 编写的。但是,我假设 API 需要 JSON。我已经尝试将以下标头与 data 方法一起添加到 HTTP 请求中:
headers = {'Content-Type': "application/json; charset=UTF-8"}和headers = {'Content-Type': "multipart/form-data; charset=UTF-8"}他们似乎没有帮助。希望我回答了你的问题。