- Rohan Jain (crodjer)
- Justin Barber <barber.justin@gmail.com>
- Roman Haritonov <@reclosedev>
+- Arup Malakar <amalakar@gmail.com>
:param data: (optional) Dictionary or bytes to send in the body of the :class:`Request`.
:param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`.
:param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
+ :param store_cookies: (optional) if ``False``, the received cookies as part of the HTTP response would be ignored.
:param files: (optional) Dictionary of 'name': file-like-objects (or {'name': ('filename', fileobj)}) for multipart encoding upload.
:param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth.
:param timeout: (optional) Float describing the timeout of the request.
params=dict(),
auth=None,
cookies=None,
+ store_cookies=True,
timeout=None,
redirect=False,
allow_redirects=False,
# Dictionary mapping protocol to the URL of the proxy (e.g. {'http': 'foo.bar:3128'})
self.proxies = dict(proxies or [])
+ #param store_cookies: (optional) if ``False``, the received cookies as part of the HTTP response would be ignored.
+ self.store_cookies = store_cookies
+
# If no proxies are given, allow configuration by environment variables
# HTTP_PROXY and HTTPS_PROXY.
if not self.proxies and self.config.get('trust_env'):
# Set encoding.
response.encoding = get_encoding_from_headers(response.headers)
- # Add new cookies from the server.
- extract_cookies_to_jar(self.cookies, self, resp)
+ # Add new cookies from the server. Don't if configured not to
+ if self.store_cookies:
+ extract_cookies_to_jar(self.cookies, self, resp)
# Save cookies in Response.
response.cookies = self.cookies
return False
def send(self, anyway=False, prefetch=False):
- """Sends the request. Returns True of successful, False if not.
+ """Sends the request. Returns True if successful, False if not.
If there was an HTTPError during transmission,
self.response.status_code will contain the HTTPError code.
def __init__(self,
headers=None,
cookies=None,
+ store_cookies=True,
auth=None,
timeout=None,
proxies=None,
self.prefetch = prefetch
self.verify = verify
self.cert = cert
+ self.store_cookies = store_cookies
for (k, v) in list(defaults.items()):
self.config.setdefault(k, v)
data=None,
headers=None,
cookies=None,
+ store_cookies=True,
files=None,
auth=None,
timeout=None,
:param data: (optional) Dictionary or bytes to send in the body of the :class:`Request`.
:param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`.
:param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
+ :param store_cookies: (optional) if ``False``, the received cookies as part of the HTTP response would be ignored.
:param files: (optional) Dictionary of 'filename': file-like-objects for multipart encoding upload.
:param auth: (optional) Auth tuple or callable to enable Basic/Digest/Custom HTTP Auth.
:param timeout: (optional) Float describing the timeout of the request.
params=params,
headers=headers,
cookies=cookies,
+ store_cookies=store_cookies,
files=files,
auth=auth,
hooks=hooks,
insecure_cookies_sent = json.loads(insecure_resp.text)['cookies']
self.assertEqual(insecure_cookies_sent, {})
+ def test_disabled_cookie_persistence(self):
+ """Test that cookies are not persisted when configured accordingly."""
+
+ # Check the case when no cookie is passed as part of the request and the one in response is ignored
+ cookies = requests.get(httpbin('cookies', 'set', 'key', 'value'), store_cookies = False).cookies
+ self.assertIsNone(cookies.get("key"))
+
+ # Test that the cookies passed while making the request still gets used and is available in response object.
+ # only the ones received from server is not saved
+ cookies_2 = requests.get(httpbin('cookies', 'set', 'key', 'value'), store_cookies = False,\
+ cookies = {"key_2" : "value_2"}).cookies
+ self.assertEqual(len(cookies_2), 1)
+ self.assertEqual(cookies_2.get("key_2"), "value_2")
+
+ # Use the session and make sure that the received cookie is not used in subsequent calls
+ s = requests.session()
+ s.get(httpbin('cookies', 'set', 'key', 'value'), store_cookies = False)
+ r = s.get(httpbin('cookies'))
+ self.assertEqual(json.loads(r.text)['cookies'], {})
+
+
class LWPCookieJarTest(TestBaseMixin, unittest.TestCase):
"""Check store/load of cookies to FileCookieJar's, specifically LWPCookieJar's."""