18
18
import typing
19
19
from pathlib import Path
20
20
from typing import Any , Dict , List , Optional , Union , cast
21
+ from urllib .parse import parse_qs
21
22
22
23
import playwright ._impl ._network as network
23
24
from playwright ._impl ._api_structures import (
53
54
FormType = Dict [str , Union [bool , float , str ]]
54
55
DataType = Union [Any , bytes , str ]
55
56
MultipartType = Dict [str , Union [bytes , bool , float , str , FilePayload ]]
56
- ParamsType = Dict [str , Union [bool , float , str ]]
57
+ ParamsType = Union [ Dict [str , Union [bool , float , str ]], str ]
57
58
58
59
59
60
class APIRequest :
@@ -404,7 +405,7 @@ async def _inner_fetch(
404
405
"fetch" ,
405
406
{
406
407
"url" : url ,
407
- "params" : object_to_array (params ),
408
+ "params" : params_to_protocol (params ),
408
409
"method" : method ,
409
410
"headers" : serialized_headers ,
410
411
"postData" : post_data ,
@@ -429,6 +430,23 @@ async def storage_state(
429
430
return result
430
431
431
432
433
+ def params_to_protocol (params : Optional [ParamsType ]) -> Optional [List [NameValue ]]:
434
+ if not params :
435
+ return None
436
+ if isinstance (params , dict ):
437
+ return object_to_array (params )
438
+ if params .startswith ("?" ):
439
+ params = params [1 :]
440
+ parsed = parse_qs (params )
441
+ if not parsed :
442
+ return None
443
+ out = []
444
+ for name , values in parsed .items ():
445
+ for value in values :
446
+ out .append (NameValue (name = name , value = value ))
447
+ return out
448
+
449
+
432
450
def file_payload_to_json (payload : FilePayload ) -> ServerFilePayload :
433
451
return ServerFilePayload (
434
452
name = payload ["name" ],
0 commit comments