Skip to content

Commit bbe6578

Browse files
committed
Remove request reference in _make_request_handler
1 parent 6a02652 commit bbe6578

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

scrapy_playwright/handler.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,16 @@ async def _download_request(self, request: Request, spider: Spider) -> Response:
132132
if not isinstance(page, Page):
133133
page = await self._create_page(request)
134134
await page.unroute("**")
135-
await page.route("**", self._make_request_handler(scrapy_request=request))
135+
await page.route(
136+
"**",
137+
self._make_request_handler(
138+
url=request.url,
139+
method=request.method,
140+
headers=request.headers.to_unicode_dict(),
141+
body=request.body,
142+
encoding=getattr(request, "encoding", None),
143+
),
144+
)
136145

137146
try:
138147
result = await self._download_request_with_page(request, page)
@@ -186,28 +195,23 @@ def close_browser_context_callback() -> None:
186195

187196
return close_browser_context_callback
188197

189-
def _make_request_handler(self, scrapy_request: Request) -> Callable:
198+
def _make_request_handler(
199+
self, url: str, method: str, headers: dict, body: Optional[bytes], encoding: str = "utf8"
200+
) -> Callable:
190201
def request_handler(route: Route, pw_request: PlaywrightRequest) -> None:
191202
"""Override request headers, method and body."""
192-
if pw_request.url == scrapy_request.url:
193-
overrides = {
194-
"method": scrapy_request.method,
195-
"headers": {
196-
key.decode("utf-8").lower(): value[0].decode("utf-8")
197-
for key, value in scrapy_request.headers.items()
198-
},
199-
}
200-
if scrapy_request.body:
201-
overrides["post_data"] = scrapy_request.body.decode(scrapy_request.encoding)
203+
if pw_request.url == url:
204+
overrides: dict = {"method": method, "headers": headers}
205+
if body is not None:
206+
overrides["post_data"] = body.decode(encoding)
202207
# otherwise this fails with playwright.helper.Error: NS_ERROR_NET_RESET
203208
if self.browser_type == "firefox":
204209
overrides["headers"]["host"] = urlparse(pw_request.url).netloc
205210
else:
206211
overrides = {"headers": pw_request.headers.copy()}
207212
# override user agent, for consistency with other requests
208-
if scrapy_request.headers.get("user-agent"):
209-
user_agent = scrapy_request.headers["user-agent"].decode("utf-8")
210-
overrides["headers"]["user-agent"] = user_agent
213+
if headers.get("user-agent"):
214+
overrides["headers"]["user-agent"] = headers["user-agent"]
211215
asyncio.create_task(route.continue_(**overrides))
212216
# increment stats
213217
self.stats.inc_value("playwright/request_count")

0 commit comments

Comments
 (0)