| 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 |
|
|
|
|
| __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, |
| ) |
|
|