| 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 |
|
|