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