| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438 |
- from __future__ import annotations
- import typing
- from contextlib import contextmanager
- from ._client import Client
- from ._config import DEFAULT_TIMEOUT_CONFIG
- from ._models import Response
- from ._types import (
- AuthTypes,
- CookieTypes,
- HeaderTypes,
- ProxyTypes,
- QueryParamTypes,
- RequestContent,
- RequestData,
- RequestFiles,
- TimeoutTypes,
- )
- from ._urls import URL
- if typing.TYPE_CHECKING:
- import ssl # pragma: no cover
- __all__ = [
- "delete",
- "get",
- "head",
- "options",
- "patch",
- "post",
- "put",
- "request",
- "stream",
- ]
- def request(
- method: str,
- url: URL | str,
- *,
- params: QueryParamTypes | None = None,
- content: RequestContent | None = None,
- data: RequestData | None = None,
- files: RequestFiles | None = None,
- json: typing.Any | None = None,
- headers: HeaderTypes | None = None,
- cookies: CookieTypes | None = None,
- auth: AuthTypes | None = None,
- proxy: ProxyTypes | None = None,
- timeout: TimeoutTypes = DEFAULT_TIMEOUT_CONFIG,
- follow_redirects: bool = False,
- verify: ssl.SSLContext | str | bool = True,
- trust_env: bool = True,
- ) -> Response:
- """
- Sends an HTTP request.
- **Parameters:**
- * **method** - HTTP method for the new `Request` object: `GET`, `OPTIONS`,
- `HEAD`, `POST`, `PUT`, `PATCH`, or `DELETE`.
- * **url** - URL for the new `Request` object.
- * **params** - *(optional)* Query parameters to include in the URL, as a
- string, dictionary, or sequence of two-tuples.
- * **content** - *(optional)* Binary content to include in the body of the
- request, as bytes or a byte iterator.
- * **data** - *(optional)* Form data to include in the body of the request,
- as a dictionary.
- * **files** - *(optional)* A dictionary of upload files to include in the
- body of the request.
- * **json** - *(optional)* A JSON serializable object to include in the body
- of the request.
- * **headers** - *(optional)* Dictionary of HTTP headers to include in the
- request.
- * **cookies** - *(optional)* Dictionary of Cookie items to include in the
- request.
- * **auth** - *(optional)* An authentication class to use when sending the
- request.
- * **proxy** - *(optional)* A proxy URL where all the traffic should be routed.
- * **timeout** - *(optional)* The timeout configuration to use when sending
- the request.
- * **follow_redirects** - *(optional)* Enables or disables HTTP redirects.
- * **verify** - *(optional)* Either `True` to use an SSL context with the
- default CA bundle, `False` to disable verification, or an instance of
- `ssl.SSLContext` to use a custom context.
- * **trust_env** - *(optional)* Enables or disables usage of environment
- variables for configuration.
- **Returns:** `Response`
- Usage:
- ```
- >>> import httpx
- >>> response = httpx.request('GET', 'https://httpbin.org/get')
- >>> response
- <Response [200 OK]>
- ```
- """
- with Client(
- cookies=cookies,
- proxy=proxy,
- verify=verify,
- timeout=timeout,
- trust_env=trust_env,
- ) as client:
- return client.request(
- method=method,
- url=url,
- content=content,
- data=data,
- files=files,
- json=json,
- params=params,
- headers=headers,
- auth=auth,
- follow_redirects=follow_redirects,
- )
- @contextmanager
- def stream(
- method: str,
- url: URL | str,
- *,
- params: QueryParamTypes | None = None,
- content: RequestContent | None = None,
- data: RequestData | None = None,
- files: RequestFiles | None = None,
- json: typing.Any | None = None,
- headers: HeaderTypes | None = None,
- cookies: CookieTypes | None = None,
- auth: AuthTypes | None = None,
- proxy: ProxyTypes | None = None,
- timeout: TimeoutTypes = DEFAULT_TIMEOUT_CONFIG,
- follow_redirects: bool = False,
- verify: ssl.SSLContext | str | bool = True,
- trust_env: bool = True,
- ) -> typing.Iterator[Response]:
- """
- Alternative to `httpx.request()` that streams the response body
- instead of loading it into memory at once.
- **Parameters**: See `httpx.request`.
- See also: [Streaming Responses][0]
- [0]: /quickstart#streaming-responses
- """
- with Client(
- cookies=cookies,
- proxy=proxy,
- verify=verify,
- timeout=timeout,
- trust_env=trust_env,
- ) as client:
- with client.stream(
- method=method,
- url=url,
- content=content,
- data=data,
- files=files,
- json=json,
- params=params,
- headers=headers,
- auth=auth,
- follow_redirects=follow_redirects,
- ) as response:
- yield response
- def get(
- url: URL | str,
- *,
- params: QueryParamTypes | None = None,
- headers: HeaderTypes | None = None,
- cookies: CookieTypes | None = None,
- auth: AuthTypes | None = None,
- proxy: ProxyTypes | None = None,
- follow_redirects: bool = False,
- verify: ssl.SSLContext | str | bool = True,
- timeout: TimeoutTypes = DEFAULT_TIMEOUT_CONFIG,
- trust_env: bool = True,
- ) -> Response:
- """
- Sends a `GET` request.
- **Parameters**: See `httpx.request`.
- Note that the `data`, `files`, `json` and `content` parameters are not available
- on this function, as `GET` requests should not include a request body.
- """
- return request(
- "GET",
- url,
- params=params,
- headers=headers,
- cookies=cookies,
- auth=auth,
- proxy=proxy,
- follow_redirects=follow_redirects,
- verify=verify,
- timeout=timeout,
- trust_env=trust_env,
- )
- def options(
- url: URL | str,
- *,
- params: QueryParamTypes | None = None,
- headers: HeaderTypes | None = None,
- cookies: CookieTypes | None = None,
- auth: AuthTypes | None = None,
- proxy: ProxyTypes | None = None,
- follow_redirects: bool = False,
- verify: ssl.SSLContext | str | bool = True,
- timeout: TimeoutTypes = DEFAULT_TIMEOUT_CONFIG,
- trust_env: bool = True,
- ) -> Response:
- """
- Sends an `OPTIONS` request.
- **Parameters**: See `httpx.request`.
- Note that the `data`, `files`, `json` and `content` parameters are not available
- on this function, as `OPTIONS` requests should not include a request body.
- """
- return request(
- "OPTIONS",
- url,
- params=params,
- headers=headers,
- cookies=cookies,
- auth=auth,
- proxy=proxy,
- follow_redirects=follow_redirects,
- verify=verify,
- timeout=timeout,
- trust_env=trust_env,
- )
- def head(
- url: URL | str,
- *,
- params: QueryParamTypes | None = None,
- headers: HeaderTypes | None = None,
- cookies: CookieTypes | None = None,
- auth: AuthTypes | None = None,
- proxy: ProxyTypes | None = None,
- follow_redirects: bool = False,
- verify: ssl.SSLContext | str | bool = True,
- timeout: TimeoutTypes = DEFAULT_TIMEOUT_CONFIG,
- trust_env: bool = True,
- ) -> Response:
- """
- Sends a `HEAD` request.
- **Parameters**: See `httpx.request`.
- Note that the `data`, `files`, `json` and `content` parameters are not available
- on this function, as `HEAD` requests should not include a request body.
- """
- return request(
- "HEAD",
- url,
- params=params,
- headers=headers,
- cookies=cookies,
- auth=auth,
- proxy=proxy,
- follow_redirects=follow_redirects,
- verify=verify,
- timeout=timeout,
- trust_env=trust_env,
- )
- def post(
- url: URL | str,
- *,
- content: RequestContent | None = None,
- data: RequestData | None = None,
- files: RequestFiles | None = None,
- json: typing.Any | None = None,
- params: QueryParamTypes | None = None,
- headers: HeaderTypes | None = None,
- cookies: CookieTypes | None = None,
- auth: AuthTypes | None = None,
- proxy: ProxyTypes | None = None,
- follow_redirects: bool = False,
- verify: ssl.SSLContext | str | bool = True,
- timeout: TimeoutTypes = DEFAULT_TIMEOUT_CONFIG,
- trust_env: bool = True,
- ) -> Response:
- """
- Sends a `POST` request.
- **Parameters**: See `httpx.request`.
- """
- return request(
- "POST",
- url,
- content=content,
- data=data,
- files=files,
- json=json,
- params=params,
- headers=headers,
- cookies=cookies,
- auth=auth,
- proxy=proxy,
- follow_redirects=follow_redirects,
- verify=verify,
- timeout=timeout,
- trust_env=trust_env,
- )
- def put(
- url: URL | str,
- *,
- content: RequestContent | None = None,
- data: RequestData | None = None,
- files: RequestFiles | None = None,
- json: typing.Any | None = None,
- params: QueryParamTypes | None = None,
- headers: HeaderTypes | None = None,
- cookies: CookieTypes | None = None,
- auth: AuthTypes | None = None,
- proxy: ProxyTypes | None = None,
- follow_redirects: bool = False,
- verify: ssl.SSLContext | str | bool = True,
- timeout: TimeoutTypes = DEFAULT_TIMEOUT_CONFIG,
- trust_env: bool = True,
- ) -> Response:
- """
- Sends a `PUT` request.
- **Parameters**: See `httpx.request`.
- """
- return request(
- "PUT",
- url,
- content=content,
- data=data,
- files=files,
- json=json,
- params=params,
- headers=headers,
- cookies=cookies,
- auth=auth,
- proxy=proxy,
- follow_redirects=follow_redirects,
- verify=verify,
- timeout=timeout,
- trust_env=trust_env,
- )
- def patch(
- url: URL | str,
- *,
- content: RequestContent | None = None,
- data: RequestData | None = None,
- files: RequestFiles | None = None,
- json: typing.Any | None = None,
- params: QueryParamTypes | None = None,
- headers: HeaderTypes | None = None,
- cookies: CookieTypes | None = None,
- auth: AuthTypes | None = None,
- proxy: ProxyTypes | None = None,
- follow_redirects: bool = False,
- verify: ssl.SSLContext | str | bool = True,
- timeout: TimeoutTypes = DEFAULT_TIMEOUT_CONFIG,
- trust_env: bool = True,
- ) -> Response:
- """
- Sends a `PATCH` request.
- **Parameters**: See `httpx.request`.
- """
- return request(
- "PATCH",
- url,
- content=content,
- data=data,
- files=files,
- json=json,
- params=params,
- headers=headers,
- cookies=cookies,
- auth=auth,
- proxy=proxy,
- follow_redirects=follow_redirects,
- verify=verify,
- timeout=timeout,
- trust_env=trust_env,
- )
- def delete(
- url: URL | str,
- *,
- params: QueryParamTypes | None = None,
- headers: HeaderTypes | None = None,
- cookies: CookieTypes | None = None,
- auth: AuthTypes | None = None,
- proxy: ProxyTypes | None = None,
- follow_redirects: bool = False,
- timeout: TimeoutTypes = DEFAULT_TIMEOUT_CONFIG,
- verify: ssl.SSLContext | str | bool = True,
- trust_env: bool = True,
- ) -> Response:
- """
- Sends a `DELETE` request.
- **Parameters**: See `httpx.request`.
- Note that the `data`, `files`, `json` and `content` parameters are not available
- on this function, as `DELETE` requests should not include a request body.
- """
- return request(
- "DELETE",
- url,
- params=params,
- headers=headers,
- cookies=cookies,
- auth=auth,
- proxy=proxy,
- follow_redirects=follow_redirects,
- verify=verify,
- timeout=timeout,
- trust_env=trust_env,
- )
|