diff --git a/scrapy/core/downloader/webclient.py b/scrapy/core/downloader/webclient.py index 552fc6597..e95a9b945 100644 --- a/scrapy/core/downloader/webclient.py +++ b/scrapy/core/downloader/webclient.py @@ -87,7 +87,7 @@ class ScrapyHTTPClientFactory(HTTPClientFactory): self.url = urldefrag(request.url)[0] self.method = request.method self.body = request.body or None - self.headers = request.headers + self.headers = Headers(request.headers) self.response_headers = None self.timeout = timeout self.deferred = defer.Deferred().addCallback(self._build_response) diff --git a/scrapy/tests/test_downloader_handlers.py b/scrapy/tests/test_downloader_handlers.py index f5bf63ec2..596a75962 100644 --- a/scrapy/tests/test_downloader_handlers.py +++ b/scrapy/tests/test_downloader_handlers.py @@ -84,11 +84,25 @@ class HttpTestCase(unittest.TestCase): d = download_http(request, spider) return self.assertFailure(d, defer.TimeoutError) - def test_host_header(self): + def test_host_header_not_in_request_headers(self): + def _test(response): + self.assertEquals(response.body, '127.0.0.1:%d' % self.portno) + self.assertEquals(request.headers, {}) + request = Request(self.getURL('host')) + return download_http(request, BaseSpider()).addCallback(_test) + + def test_host_header_seted_in_request_headers(self): + def _test(response): + self.assertEquals(response.body, 'example.com') + self.assertEquals(request.headers.get('Host'), 'example.com') + + request = Request(self.getURL('host'), headers={'Host': 'example.com'}) + return download_http(request, BaseSpider()).addCallback(_test) + d = download_http(request, BaseSpider()) d.addCallback(lambda r: r.body) - d.addCallback(self.assertEquals, '127.0.0.1:%d' % self.portno) + d.addCallback(self.assertEquals, 'example.com') return d def test_payload(self):