Skip to main content
 首页 » 编程设计

Python 请求之为什么在没有 POST 数据的情况下 POST 不退回到 GET

2025年05月04日16zfyouxi

运行 python 版本 3.5.1 和 requests 模块版本 2.9.1

有效的旧版本 - python 版本 2.7.9,遗憾的是没有 requests 模块版本。


在以前的场景中,我只需要处理 POST 或 GET 请求。

以前,使用 requests 模块时,指定 POST 请求并将 data 关键字参数设置为 None,请求将默认返回到 GET 请求。

request = requests.post(url=self.url, headers=self.headers, 
                        data=self.data, timeout=self.timeout,  
                        proxies=self.proxies, verify=False) 

这非常巧妙,因为您可以编写一个通用的 request 函数,在一个 block 中涵盖 GET 和 POST 请求。然而,情况似乎不再如此,这导致我编写了一些丑陋的代码,如下所示:

if self.data: 
    request = requests.post(url=self.url, headers=self.headers, 
                            data=self.data, timeout=self.timeout,  
                            proxies=self.proxies, verify=False) 
else: 
    request = requests.get(url=self.url, headers=self.headers, 
                           data=None, timeout=self.timeout,  
                           proxies=self.proxies, verify=False) 

这并不是真正可取的。我浏览了 requests Github 和文档,看看是否有任何文件可以证明这一点,但似乎并非如此。

此功能是否已被删除,或者在新版本中是否发生了变化?

请您参考如下方法:

您也可以只使用 request() 函数而不是 get 和 post 便利函数。

import requests 
 
response = requests.request('POST' if self.data else 'GET', url=self.url,  
                             headers=self.headers, data=self.data or None,  
                             timeout=self.timeout, proxies=self.proxies, verify=False)