我正在尝试使用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的请求后代码:
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方法似乎没有做到这一点,因为我得到了错误414。我希望通过使用数据可以解决这个错误。
我使用的API是用PHP编写的。
简短回答
这是因为params作为http POST请求的一部分发送参数,而数据作为请求主体的一部分发送参数。在您的例子中:只要使用params调用api就可以了。这绝对是正常的(和预期的)行为。
演示
开始两条命令。首先,运行netcat:
nc -l 8888
。在另一条命令行上,运行python:在netcat端,我们看到以下请求:
接下来,尝试params方式:
Netcat报告:
注意第一行和最后一行的区别。
你可以从documentation(斜体强调是我的):
相关问题 更多 >
编程相关推荐