| 183 | |
| 184 | @override |
| 185 | async def send_request( |
| 186 | self, |
| 187 | url: str, |
| 188 | *, |
| 189 | method: HttpMethod = 'GET', |
| 190 | headers: HttpHeaders | dict[str, str] | None = None, |
| 191 | payload: HttpPayload | None = None, |
| 192 | session: Session | None = None, |
| 193 | proxy_info: ProxyInfo | None = None, |
| 194 | timeout: timedelta | None = None, |
| 195 | ) -> HttpResponse: |
| 196 | validate_http_url(url) |
| 197 | |
| 198 | client = self._get_client(proxy_info.url if proxy_info else None) |
| 199 | |
| 200 | http_request = self._build_request( |
| 201 | client=client, |
| 202 | url=url, |
| 203 | method=method, |
| 204 | headers=headers, |
| 205 | payload=payload, |
| 206 | session=session, |
| 207 | timeout=httpx.Timeout(timeout.total_seconds()) if timeout is not None else None, |
| 208 | ) |
| 209 | |
| 210 | try: |
| 211 | response = await client.send(http_request) |
| 212 | except httpx.TimeoutException as exc: |
| 213 | raise asyncio.TimeoutError from exc |
| 214 | except httpx.TransportError as exc: |
| 215 | if self._is_proxy_error(exc): |
| 216 | raise ProxyError from exc |
| 217 | raise |
| 218 | |
| 219 | return _HttpxResponse(response) |
| 220 | |
| 221 | @asynccontextmanager |
| 222 | @override |