您可以通过定义一个拒绝所有 cookie 的 cookie 政策来实现此操作:
from http import 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 要求您定义一堆属性和方法,如所示。)
然后,在您的 Requests 会话中设置 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
。因此,在对requests.get
进行分开的调用时,cookie不会被保留。但是,如果第一个页面设置了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': {}}