根据requests documentation:
-
requests.post(url, data=data) 将发出 HTTP POST 请求,并且
-
requests.get(url, params=params) 将发出HTTP GET 请求
要了解两者之间的区别,see this answer。
下面是如何在 GET 中使用参数:
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get('http://httpbin.org/get', params=payload)
print(r.text)
哪些输出
{
"args": {
"key1": "value1",
"key2": "value2"
},
[...]
"url": "http://httpbin.org/get?key1=value1&key2=value2"
}
请注意,有效负载最终出现在 URL 的 query string 中。由于它们最终到达那里,任何有权访问该 URL 的人都可以查看它们,这就是为什么您不应该将查询字符串用于密码等敏感数据。
以下是如何在 POST 中使用数据:
payload = 'foobar'
r = requests.post('http://httpbin.org/post', data=payload)
print(r.text)
哪些输出
{
"args": {},
"data": "foobar",
[...]
"url": "http://httpbin.org/post"
}
请注意 POST 数据未显示在查询字符串中,因为它们是通过请求正文传输的。
对此答案的批评指出,还有更多选择。我在最初的回答中从未否认过这样的事情,但让我们仔细看看。
文档示例总是显示:
- 用于 GET 的 params 关键字,以及
- 用于 POST 的数据关键字
但这并不意味着它们是相互排斥的。
理论上,您可以在 POST 中将两者混合在一起:
data = 'foobar'
params = {'key1': 'value1', 'key2': 'value2'}
r = requests.post('http://httpbin.org/post', params=params, data=data)
print(r.text)
哪些输出
{
"args": {
"key1": "value1",
"key2": "value2"
},
"data": "foobar",
[...]
"url": "http://httpbin.org/post?key1=value1&key2=value2"
}
但您不能将数据混合到 GET 中:
data = 'foobar'
params = {'key1': 'value1', 'key2': 'value2'}
r = requests.get('http://httpbin.org/get', params=params, data=data)
print(r.text)
输出:
{
"args": {
"key1": "value1",
"key2": "value2"
},
[...]
"url": "http://httpbin.org/get?key1=value1&key2=value2"
}
注意数据字段是如何消失的。