95 lines
3.1 KiB
Python
95 lines
3.1 KiB
Python
![]() |
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
|