|
5 | 5 |
|
6 | 6 | try: |
7 | 7 | from scrapy import Request, Spider |
| 8 | + from scrapy.http.headers import Headers |
8 | 9 | from scrapy.utils.request import request_from_dict |
9 | 10 | except ImportError as exc: |
10 | 11 | raise ImportError( |
@@ -37,10 +38,16 @@ def to_apify_request(scrapy_request: Request, spider: Spider) -> dict: |
37 | 38 | apify_request = { |
38 | 39 | 'url': scrapy_request.url, |
39 | 40 | 'method': scrapy_request.method, |
40 | | - 'headers': scrapy_request.headers, |
41 | 41 | 'userData': scrapy_request.meta.get('userData', {}), |
42 | 42 | } |
43 | 43 |
|
| 44 | + if isinstance(scrapy_request.headers, Headers): |
| 45 | + apify_request['headers'] = dict(scrapy_request.headers.to_unicode_dict()) |
| 46 | + else: |
| 47 | + Actor.log.warning( |
| 48 | + f'scrapy_request.headers is not an instance of the scrapy.http.headers.Headers class, scrapy_request.headers = {scrapy_request.headers}', |
| 49 | + ) |
| 50 | + |
44 | 51 | # Add 'id' to the apify_request |
45 | 52 | if scrapy_request.meta.get('apify_request_id'): |
46 | 53 | apify_request['id'] = scrapy_request.meta['apify_request_id'] |
@@ -129,7 +136,12 @@ def to_scrapy_request(apify_request: dict, spider: Spider) -> Request: |
129 | 136 |
|
130 | 137 | # Add optional 'headers' field |
131 | 138 | if 'headers' in apify_request: |
132 | | - scrapy_request.headers = apify_request['headers'] |
| 139 | + if isinstance(apify_request['headers'], dict): |
| 140 | + scrapy_request.headers = Headers(apify_request['headers']) |
| 141 | + else: |
| 142 | + Actor.log.warning( |
| 143 | + f'apify_request[headers] is not an instance of the dict class, apify_request[headers] = {apify_request["headers"]}', |
| 144 | + ) |
133 | 145 |
|
134 | 146 | # Add optional 'userData' field |
135 | 147 | if 'userData' in apify_request: |
|
0 commit comments