【发布时间】:2026-02-01 12:10:01
【问题描述】:
运行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 函数,在一个块中涵盖 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 和文档,看看是否有任何文件记录了这一点,但似乎并非如此。
此功能是否已被删除,还是在新版本中有所更改?
【问题讨论】:
-
哇,所谓的旧行为是恶心。您可以有空正文的 POST 请求。神奇地使用不同的请求类型,当用户明确请求
.post时,似乎很疯狂。 -
@JeremyBanks - 您可以指定空主体,只有当它设置为
None时才会回退到GET请求。.post确实有点违反直觉,但我更喜欢添加一个解释清楚的单个注释,而不是必须在两个不同的地方复制同一个块(成为维护问题)。可能是个人喜好:-) -
事实证明,我之前的做法还有更好的替代方案!