cookies: fix merging user cookies

--HG--
extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%401080
This commit is contained in:
Daniel Grana 2009-04-21 17:13:12 +00:00
parent 4a6f7af739
commit 3de3c2a331
2 changed files with 18 additions and 5 deletions

View File

@ -1,12 +1,15 @@
import operator
from itertools import groupby
from collections import defaultdict
from pydispatch import dispatcher
from collections import defaultdict
from scrapy.core import signals
from scrapy.http import Response
from scrapy.utils.cookies import CookieJar
from scrapy.core.exceptions import HttpException
from scrapy import log
class CookiesMiddleware(object):
"""This middleware enables working with sites that need cookies"""
@ -19,7 +22,8 @@ class CookiesMiddleware(object):
return
jar = self.jars[spider.domain_name]
for name, cookie in request.cookies.items():
cookies = _get_cookies(jar, request)
for cookie in cookies:
jar.set_cookie_if_ok(cookie, request)
# set Cookie header
@ -43,3 +47,12 @@ class CookiesMiddleware(object):
def domain_closed(self, domain):
self.jars.pop(domain, None)
def _get_cookies(jar, request):
headers = {'Set-Cookie': ['%s=%s;' % (k, v) for k, v in request.cookies.iteritems()]}
response = Response(request.url, headers=headers)
cookies = jar.make_cookies(response, request)
return cookies

View File

@ -73,16 +73,16 @@ class CookiesMiddlewareTest(TestCase):
self.assertEquals(req.headers.get('Cookie'), 'C1=value1')
def test_merge_request_cookies(self):
headers = {'Set-Cookie': 'C1=value1; path=/'}
req = Request('http://scrapytest.org/', cookies={'galleta': 'salada'})
self.mw.process_request(req, self.spider)
self.assertEquals(req.headers.get('Cookie'), 'galleta=salada')
headers = {'Set-Cookie': 'C1=value1; path=/'}
res = Response('http://scrapytest.org/', headers=headers)
self.mw.process_response(req, res, self.spider)
req2 = Request('http://scrapytest.org/sub1/')
self.mw.process_request(req2, self.spider)
self.assertEquals(req2.headers.get('Cookie'), "C1=value1")
self.assertEquals(req2.headers.get('Cookie'), "C1=value1; galleta=salada")