2017-10-16 101 views
1

我正在尝试使用requests.Session来提出一些请求,我希望cookie不被设置。看看this question,看起来我可以创建一个cookie策略,并为该策略创建一个cookie jar来忽略cookie。但是,对于我的请求,似乎仍然设置了Cookie:Cookie政策被忽略?

from http import cookiejar 

class BlockAll(cookiejar.CookiePolicy): 
     """ Blocks all cookies for a given request. 
     """ 
     return_ok = set_ok = domain_return_ok = path_return_ok = lambda self, *args, **kwargs: False 
     netscape = True 
     rfc2965 = hide_cookie2 = False 


def get_cookie_jar(): 
    cookies = cookiejar.CookieJar(policy=BlockAll()) 
    return cookies 

session = requests.Session() 
response = session.request(
    method='post', 
    url='some_url.com', 
    cookies=get_cookie_jar(), 
    .... 
) 

print(response.cookies) 
<RequestsCookieJar[Cookie(version=0, name='JSESSIONID', value='1234', port=None, port_specified=False, domain='some_url.com', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False)]> 

这是为此类请求设置策略的正确方法吗?任何帮助/相关文件的链接将不胜感激。

回答

2

request(...)cookies参数允许您在请求上指定传出cookie 。对于传入的Cookie 在响应上未咨询。

您需要设置的会话策略:

session = requests.Session() 
session.cookies.set_policy(BlockAll()) 

演示:

>>> session = requests.Session() 
>>> response = session.request('GET', 'http://httpbin.org/cookies/set?foo=bar') 
>>> session.cookies # no policy, so cookie got set 
<RequestsCookieJar[Cookie(version=0, name='foo', value='bar', port=None, port_specified=False, domain='httpbin.org', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False)]> 
>>> session.cookies.clear() # clean slate, no cookies 
>>> session.cookies 
<RequestsCookieJar[]> 
>>> session.cookies.set_policy(BlockAll()) 
>>> response = session.request('GET', 'http://httpbin.org/cookies/set?foo=bar') 
>>> session.cookies # with policy, cookies still empty 
<RequestsCookieJar[]>