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)