您可以通过定义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': {}}