from urllib.request import Request, urlopen def get( url: str, query_params: dict[str, str] | None = None, headers: dict[str, str] | None = None, ) -> str: with urlopen( Request( url + ("?" + "&".join(f"{k}={v}" for k, v in query_params.items())) if query_params else "", headers=headers or {}, method="GET", ), ) as resp: return resp.read().decode("utf-8") def put( url: str, data: dict[str, str] | None = None, headers: dict[str, str] | None = None, ) -> str: with urlopen( Request( url, str(data).encode(), headers=headers or {}, method="PUT", ), ) as resp: return resp.read().decode("utf-8")