Send a raw HTTP request without client-side decompression. Args: url: The base URL to connect to. path: The request path. headers: Optional request headers. Returns: The status code, response headers, and raw body.
(
url: str,
path: str,
headers: dict[str, str] | None = None,
)
| 14 | |
| 15 | |
| 16 | def request_raw( |
| 17 | url: str, |
| 18 | path: str, |
| 19 | headers: dict[str, str] | None = None, |
| 20 | ) -> tuple[int, dict[str, str], bytes]: |
| 21 | """Send a raw HTTP request without client-side decompression. |
| 22 | |
| 23 | Args: |
| 24 | url: The base URL to connect to. |
| 25 | path: The request path. |
| 26 | headers: Optional request headers. |
| 27 | |
| 28 | Returns: |
| 29 | The status code, response headers, and raw body. |
| 30 | """ |
| 31 | parsed = urlsplit(url) |
| 32 | assert parsed.hostname is not None |
| 33 | assert parsed.port is not None |
| 34 | conn = HTTPConnection(parsed.hostname, parsed.port, timeout=10) |
| 35 | conn.request("GET", path, headers=headers or {}) |
| 36 | resp = conn.getresponse() |
| 37 | body = resp.read() |
| 38 | hdrs = {k.lower(): v for k, v in resp.getheaders()} |
| 39 | status = resp.status |
| 40 | conn.close() |
| 41 | return status, hdrs, body |
| 42 | |
| 43 | |
| 44 | @contextmanager |