|
8 | 8 | from typing import TYPE_CHECKING |
9 | 9 | from unittest import mock |
10 | 10 |
|
11 | | -from crawlee import Glob |
| 11 | +from crawlee import Glob, Request |
12 | 12 | from crawlee.fingerprint_suite._consts import ( |
13 | 13 | PW_CHROMIUM_HEADLESS_DEFAULT_SEC_CH_UA, |
14 | 14 | PW_CHROMIUM_HEADLESS_DEFAULT_SEC_CH_UA_MOBILE, |
@@ -133,6 +133,26 @@ async def request_handler(context: PlaywrightCrawlingContext) -> None: |
133 | 133 | assert headers['User-Agent'] == PW_FIREFOX_HEADLESS_DEFAULT_USER_AGENT |
134 | 134 |
|
135 | 135 |
|
| 136 | +async def test_custom_headers() -> None: |
| 137 | + crawler = PlaywrightCrawler() |
| 138 | + response_headers = dict[str, str]() |
| 139 | + request_headers = {'Power-Header': 'ring', 'Library': 'storm', 'My-Test-Header': 'fuzz'} |
| 140 | + |
| 141 | + @crawler.router.default_handler |
| 142 | + async def request_handler(context: PlaywrightCrawlingContext) -> None: |
| 143 | + response = await context.response.text() |
| 144 | + context_response_headers = dict(json.loads(response)).get('headers', {}) |
| 145 | + |
| 146 | + for key, val in context_response_headers.items(): |
| 147 | + response_headers[key] = val |
| 148 | + |
| 149 | + await crawler.run([Request.from_url('https://httpbin.org/get', headers=request_headers)]) |
| 150 | + |
| 151 | + assert response_headers.get('Power-Header') == request_headers['Power-Header'] |
| 152 | + assert response_headers.get('Library') == request_headers['Library'] |
| 153 | + assert response_headers.get('My-Test-Header') == request_headers['My-Test-Header'] |
| 154 | + |
| 155 | + |
136 | 156 | async def test_pre_navigation_hook() -> None: |
137 | 157 | crawler = PlaywrightCrawler() |
138 | 158 | mock_hook = mock.AsyncMock(return_value=None) |
|
0 commit comments