Here’s a Python snippet that makes an HTTP POST request:
# script.py
import httpx
from typing import Any
async def make_request(url: str) -> dict[str, Any]:
headers = {"Content-Type": "application/json"}
async with httpx.AsyncClient(headers=headers) as client:
response = await client.post(
url,
json={"key_1": "value_1", "key_2": "value_2"},
)
return response.json()
The function make_request makes an async HTTP request with the HTTPx library. Running
this with asyncio.run(make_request("https://httpbin.org/post")) gives us the following
output:
{
"args": {},
"data": "{\"key_1\": \"value_1\", \"key_2\": \"value_2\"}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "40",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "python-httpx/0.27.2",
"X-Amzn-Trace-Id": "Root=1-66d5f7b0-2ed0ddc57241f0960f28bc91"
},
"json": {
"key_1": "value_1",
"key_2": "value_2"
},
"origin": "95.90.238.240",
"url": "https://httpbin.org/post"
}
We’re only interested in the json field and want to assert in our test that making the
HTTP call returns the expected values.