您可以通过定义拒绝所有 cookie 的 cookie 策略来做到这一点:
from http import cookiejar # Python 2: import cookielib as cookiejar
class BlockAll(cookiejar.CookiePolicy):
return_ok = set_ok = domain_return_ok = path_return_ok = lambda self, *args, **kwargs: False
netscape = True
rfc2965 = hide_cookie2 = False
(请注意,http.cookiejar
的 API 要求您定义一堆属性和方法,如图所示。)
然后,在您的请求会话上设置 cookie 策略:
import requests
s = requests.Session()
s.cookies.set_policy(BlockAll())
它现在不会存储或发送 cookie:
s.get("https://httpbin.org/cookies/set?foo=bar")
assert not s.cookies
顺便说一句,如果您查看代码,requests
包中的便捷方法(与对象上的方法相反)每次都会requests.Session
构造一个新方法。Session
因此,cookie 不会在对requests.get
. 但是,如果第一页设置了 cookie,然后发出 HTTP 重定向,则目标页面将看到 cookie。(这就是 HTTPBin/cookies/set
调用发生的情况,它重定向到/cookies
.)
因此,根据您希望重定向的行为,您可能不需要做任何特别的事情。相比:
>>> print(requests.get("https://httpbin.org/cookies/set?foo=bar").json())
{'cookies': {'foo': 'bar'}}
>>> print(requests.get("https://httpbin.org/cookies").json())
{'cookies': {}}
>>> s = requests.Session()
>>> print(s.get("https://httpbin.org/cookies/set?foo=bar").json())
{'cookies': {'foo': 'bar'}}
>>> print(s.get("https://httpbin.org/cookies").json())
{'cookies': {'foo': 'bar'}}
>>> s = requests.Session()
>>> s.cookies.set_policy(BlockAll())
>>> print(s.get("https://httpbin.org/cookies/set?foo=bar").json())
{'cookies': {}}
>>> print(requests.get("https://httpbin.org/cookies").json())
{'cookies': {}}