|
from contextlib import contextmanager |
|
from typing import Iterator, Optional, Union |
|
|
|
from ._models import URL, Extensions, HeaderTypes, Response |
|
from ._sync.connection_pool import ConnectionPool |
|
|
|
|
|
def request( |
|
method: Union[bytes, str], |
|
url: Union[URL, bytes, str], |
|
*, |
|
headers: HeaderTypes = None, |
|
content: Union[bytes, Iterator[bytes], None] = None, |
|
extensions: Optional[Extensions] = 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, |
|
) |
|
|
|
|
|
@contextmanager |
|
def stream( |
|
method: Union[bytes, str], |
|
url: Union[URL, bytes, str], |
|
*, |
|
headers: HeaderTypes = None, |
|
content: Union[bytes, Iterator[bytes], None] = None, |
|
extensions: Optional[Extensions] = None, |
|
) -> 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 |
|
|