| | from __future__ import annotations |
| |
|
| | import contextlib |
| | import typing |
| |
|
| | from ._models import URL, Extensions, HeaderTypes, Response |
| | from ._sync.connection_pool import ConnectionPool |
| |
|
| |
|
| | def request( |
| | method: bytes | str, |
| | url: URL | bytes | str, |
| | *, |
| | headers: HeaderTypes = None, |
| | content: bytes | typing.Iterator[bytes] | None = None, |
| | extensions: Extensions | None = None, |
| | ) -> Response: |
| | """ |
| | Sends an HTTP request, returning the response. |
| | |
| | ``` |
| | response = httpcore.request("GET", "https://www.example.com/") |
| | ``` |
| | |
| | Arguments: |
| | method: The HTTP method for the request. Typically one of `"GET"`, |
| | `"OPTIONS"`, `"HEAD"`, `"POST"`, `"PUT"`, `"PATCH"`, or `"DELETE"`. |
| | url: The URL of the HTTP request. Either as an instance of `httpcore.URL`, |
| | or as str/bytes. |
| | headers: The HTTP request headers. Either as a dictionary of str/bytes, |
| | or as a list of two-tuples of str/bytes. |
| | content: The content of the request body. Either as bytes, |
| | or as a bytes iterator. |
| | extensions: A dictionary of optional extra information included on the request. |
| | Possible keys include `"timeout"`. |
| | |
| | Returns: |
| | An instance of `httpcore.Response`. |
| | """ |
| | with ConnectionPool() as pool: |
| | return pool.request( |
| | method=method, |
| | url=url, |
| | headers=headers, |
| | content=content, |
| | extensions=extensions, |
| | ) |
| |
|
| |
|
| | @contextlib.contextmanager |
| | def stream( |
| | method: bytes | str, |
| | url: URL | bytes | str, |
| | *, |
| | headers: HeaderTypes = None, |
| | content: bytes | typing.Iterator[bytes] | None = None, |
| | extensions: Extensions | None = None, |
| | ) -> typing.Iterator[Response]: |
| | """ |
| | Sends an HTTP request, returning the response within a content manager. |
| | |
| | ``` |
| | with httpcore.stream("GET", "https://www.example.com/") as response: |
| | ... |
| | ``` |
| | |
| | When using the `stream()` function, the body of the response will not be |
| | automatically read. If you want to access the response body you should |
| | either use `content = response.read()`, or `for chunk in response.iter_content()`. |
| | |
| | Arguments: |
| | method: The HTTP method for the request. Typically one of `"GET"`, |
| | `"OPTIONS"`, `"HEAD"`, `"POST"`, `"PUT"`, `"PATCH"`, or `"DELETE"`. |
| | url: The URL of the HTTP request. Either as an instance of `httpcore.URL`, |
| | or as str/bytes. |
| | headers: The HTTP request headers. Either as a dictionary of str/bytes, |
| | or as a list of two-tuples of str/bytes. |
| | content: The content of the request body. Either as bytes, |
| | or as a bytes iterator. |
| | extensions: A dictionary of optional extra information included on the request. |
| | Possible keys include `"timeout"`. |
| | |
| | Returns: |
| | An instance of `httpcore.Response`. |
| | """ |
| | with ConnectionPool() as pool: |
| | with pool.stream( |
| | method=method, |
| | url=url, |
| | headers=headers, |
| | content=content, |
| | extensions=extensions, |
| | ) as response: |
| | yield response |
| |
|