Skip to content

Commit 3fb407e

Browse files
authored
fix(headers): report raw request headers (microsoft#263)
1 parent f672611 commit 3fb407e

File tree

2 files changed

+34
-5
lines changed

2 files changed

+34
-5
lines changed

playwright/network.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ def __init__(
5656
"responseStart": -1,
5757
"responseEnd": -1,
5858
}
59+
self._headers: Dict[str, str] = parse_headers(self._initializer["headers"])
5960

6061
@property
6162
def url(self) -> str:
@@ -97,7 +98,7 @@ def postDataBuffer(self) -> Optional[bytes]:
9798

9899
@property
99100
def headers(self) -> Dict[str, str]:
100-
return parse_headers(self._initializer["headers"])
101+
return self._headers
101102

102103
async def response(self) -> Optional["Response"]:
103104
return from_nullable_channel(await self._channel.send("response"))
@@ -209,6 +210,7 @@ def __init__(
209210
self._request._timing["connectEnd"] = timing["connectEnd"]
210211
self._request._timing["requestStart"] = timing["requestStart"]
211212
self._request._timing["responseStart"] = timing["responseStart"]
213+
self._request._headers = parse_headers(self._initializer["requestHeaders"])
212214

213215
@property
214216
def url(self) -> str:

tests/async/test_network.py

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@
1515
import asyncio
1616
import json
1717
from asyncio.futures import Future
18-
from typing import Dict, List
18+
from typing import Dict, List, cast
1919

2020
import pytest
2121

2222
from playwright import Error
23-
from playwright.async_api import Page, Request
23+
from playwright.async_api import Page, Request, Response
2424

2525

2626
async def test_request_fulfill(page, server):
@@ -148,9 +148,32 @@ async def test_request_headers_should_work(
148148
assert "WebKit" in response.request.headers["user-agent"]
149149

150150

151-
@pytest.mark.only_browser("firefox")
152151
async def test_request_headers_should_get_the_same_headers_as_the_server(
153-
page: Page, server
152+
page: Page, server, is_webkit, is_win
153+
):
154+
server_request_headers_future: Future[Dict[str, str]] = asyncio.Future()
155+
156+
def handle(request):
157+
normalized_headers = {
158+
key.decode().lower(): value[0].decode()
159+
for key, value in request.requestHeaders.getAllRawHeaders()
160+
}
161+
server_request_headers_future.set_result(normalized_headers)
162+
request.write(b"done")
163+
request.finish()
164+
165+
server.set_route("/empty.html", handle)
166+
response = await page.goto(server.EMPTY_PAGE)
167+
server_headers = await server_request_headers_future
168+
if is_webkit and is_win:
169+
# Curl does not show accept-encoding and accept-language
170+
server_headers.pop("accept-encoding")
171+
server_headers.pop("accept-language")
172+
assert cast(Response, response).request.headers == server_headers
173+
174+
175+
async def test_request_headers_should_get_the_same_headers_as_the_server_cors(
176+
page: Page, server, is_webkit, is_win
154177
):
155178
await page.goto(server.PREFIX + "/empty.html")
156179
server_request_headers_future: Future[Dict[str, str]] = asyncio.Future()
@@ -178,6 +201,10 @@ def handle_something(request):
178201
request: Request = await requestPromise
179202
assert text == "done"
180203
server_headers = await server_request_headers_future
204+
if is_webkit and is_win:
205+
# Curl does not show accept-encoding and accept-language
206+
server_headers.pop("accept-encoding")
207+
server_headers.pop("accept-language")
181208
assert request.headers == server_headers
182209

183210

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy