2017-10-16 112 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[]>