python - 请求中的数据和参数有什么区别?

标签 python python-requests parameters

我正在使用 python requests 模块,我之前像这样发送我的参数:

requests.post(url=url, params=params)

但是今天,我发现我这样发送数据,失败了,我改成这样:

requests.post(url=url, data=params)

那没问题,dataparams有什么区别?

我观察到请求有一个header X-Requested-With:XMLHttpRequest,是因为这个吗?

最佳答案

根据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"
}

请注意,有效负载最终出现在 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 的参数关键字,以及
  • 用于 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"
}

注意数据字段是如何消失的。

关于python - 请求中的数据和参数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33496953/

相关文章:

python - 使用 Python 客户端 API 在 Google Cloud Pub/Sub 中运行同步拉取

reactjs - 如何强制react-router-v6 路由上存在searchParams?

python - 在 __dict__ 中找不到 python 中的类变量

python - Matplotlib:多线图

macos - "ModuleNotFoundError: No Module Named ' 在 macOS 上使用 Visual Studio Code 请求 '"

python-3.x - 无法获取本地颁发者证书 mac OS

java - 如果向前输入,如何在 URL 中附加查询参数?

java - 使用带有两个 int 参数而不是 int 的 void 方法?

Python有没有办法计算字符串插入字符串的数量?

python - 在Python列表中导入Excel列