* `def .get(url, [params], [headers], [cookies], [auth], [stream], [allow_redirects], [ssl], [timeout])`
* `def .options(url, [params], [headers], [cookies], [auth], [stream], [allow_redirects], [ssl], [timeout])`
* `def .head(url, [params], [headers], [cookies], [auth], [stream], [allow_redirects], [ssl], [timeout])`
-* `def .post(url, [data], [params], [headers], [cookies], [auth], [stream], [allow_redirects], [ssl], [timeout])`
-* `def .put(url, [data], [params], [headers], [cookies], [auth], [stream], [allow_redirects], [ssl], [timeout])`
-* `def .patch(url, [data], [params], [headers], [cookies], [auth], [stream], [allow_redirects], [ssl], [timeout])`
-* `def .delete(url, [data], [params], [headers], [cookies], [auth], [stream], [allow_redirects], [ssl], [timeout])`
+* `def .post(url, [data], [json], [params], [headers], [cookies], [auth], [stream], [allow_redirects], [ssl], [timeout])`
+* `def .put(url, [data], [json], [params], [headers], [cookies], [auth], [stream], [allow_redirects], [ssl], [timeout])`
+* `def .patch(url, [data], [json], [params], [headers], [cookies], [auth], [stream], [allow_redirects], [ssl], [timeout])`
+* `def .delete(url, [data], [json], [params], [headers], [cookies], [auth], [stream], [allow_redirects], [ssl], [timeout])`
* `def .prepare_request(request)`
* `def .send(request, [stream], [allow_redirects], [ssl], [timeout])`
* `def .close()`
>>> response = client.send(request)
```
-* `def __init__(method, url, [params], [data], [headers], [cookies])`
+* `def __init__(method, url, [params], [data], [json], [headers], [cookies])`
* `.method` - **str**
* `.url` - **URL**
* `.content` - **byte** or **byte async iterator**
url: URLTypes,
*,
data: RequestData = b"",
+ json: typing.Any = None,
params: QueryParamTypes = None,
headers: HeaderTypes = None,
cookies: CookieTypes = None,
"POST",
url,
data=data,
+ json=json,
params=params,
headers=headers,
cookies=cookies,
url: URLTypes,
*,
data: RequestData = b"",
+ json: typing.Any = None,
params: QueryParamTypes = None,
headers: HeaderTypes = None,
cookies: CookieTypes = None,
"PUT",
url,
data=data,
+ json=json,
params=params,
headers=headers,
cookies=cookies,
url: URLTypes,
*,
data: RequestData = b"",
+ json: typing.Any = None,
params: QueryParamTypes = None,
headers: HeaderTypes = None,
cookies: CookieTypes = None,
"PATCH",
url,
data=data,
+ json=json,
params=params,
headers=headers,
cookies=cookies,
url: URLTypes,
*,
data: RequestData = b"",
+ json: typing.Any = None,
params: QueryParamTypes = None,
headers: HeaderTypes = None,
cookies: CookieTypes = None,
"DELETE",
url,
data=data,
+ json=json,
params=params,
headers=headers,
cookies=cookies,
url: URLTypes,
*,
data: RequestData = b"",
+ json: typing.Any = None,
params: QueryParamTypes = None,
headers: HeaderTypes = None,
cookies: CookieTypes = None,
method,
url,
data=data,
+ json=json,
params=params,
headers=headers,
cookies=self.merge_cookies(cookies),
url: URLTypes,
*,
data: RequestData = b"",
+ json: typing.Any = None,
params: QueryParamTypes = None,
headers: HeaderTypes = None,
cookies: CookieTypes = None,
method,
url,
data=data,
+ json=json,
params=params,
headers=headers,
cookies=self._client.merge_cookies(cookies),
url: URLTypes,
*,
data: RequestData = b"",
+ json: typing.Any = None,
params: QueryParamTypes = None,
headers: HeaderTypes = None,
cookies: CookieTypes = None,
"POST",
url,
data=data,
+ json=json,
headers=headers,
cookies=cookies,
stream=stream,
url: URLTypes,
*,
data: RequestData = b"",
+ json: typing.Any = None,
params: QueryParamTypes = None,
headers: HeaderTypes = None,
cookies: CookieTypes = None,
"PUT",
url,
data=data,
+ json=json,
headers=headers,
cookies=cookies,
stream=stream,
url: URLTypes,
*,
data: RequestData = b"",
+ json: typing.Any = None,
params: QueryParamTypes = None,
headers: HeaderTypes = None,
cookies: CookieTypes = None,
"PATCH",
url,
data=data,
+ json=json,
headers=headers,
cookies=cookies,
stream=stream,
url: URLTypes,
*,
data: RequestData = b"",
+ json: typing.Any = None,
params: QueryParamTypes = None,
headers: HeaderTypes = None,
cookies: CookieTypes = None,
"DELETE",
url,
data=data,
+ json=json,
headers=headers,
cookies=cookies,
stream=stream,
import asyncio
import cgi
import email.message
-import json
+import json as jsonlib
import typing
import urllib.request
from collections.abc import MutableMapping
url: typing.Union[str, URL],
*,
data: RequestData = b"",
+ json: typing.Any = None,
params: QueryParamTypes = None,
headers: HeaderTypes = None,
cookies: CookieTypes = None,
self._cookies = Cookies(cookies)
self._cookies.set_cookie_header(self)
+ if json is not None:
+ data = jsonlib.dumps(json).encode("utf-8")
+ self.headers["Content-Type"] = "application/json"
+
if isinstance(data, bytes):
self.is_streaming = False
self.content = data
raise HttpError(message)
def json(self) -> typing.Any:
- return json.loads(self.content.decode("utf-8"))
+ return jsonlib.loads(self.content.decode("utf-8"))
@property
def cookies(self) -> "Cookies":
assert response.status_code == 200
+@pytest.mark.asyncio
+async def test_post_json(server):
+ url = "http://127.0.0.1:8000/"
+ async with httpcore.AsyncClient() as client:
+ response = await client.post(url, json={"text": "Hello, world!"})
+ assert response.status_code == 200
+
+
@pytest.mark.asyncio
async def test_stream_response(server):
async with httpcore.AsyncClient() as client:
assert response.reason_phrase == "OK"
+@threadpool
+def test_post_json(server):
+ with httpcore.Client() as http:
+ response = http.post("http://127.0.0.1:8000/", json={"text": "Hello, world!"})
+ assert response.status_code == 200
+ assert response.reason_phrase == "OK"
+
+
@threadpool
def test_stream_response(server):
with httpcore.Client() as http: