Welcome to aiosonic¶
Really Fast asynchronus HTTP 1.1 client, Support for http 2.0 is planned.
Current version is 0.5.0.
Repo is hosted at Github.
Features¶
Keepalive and Smart Pool of Connections
Multipart File Uploads
Chunked responses handling
Chunked requests
Fully type annotated.
Connection Timeouts
Automatic Decompression
Follow Redirects
100% test coverage.
Requirements¶
Python>=3.6
Install¶
$ pip install aiosonic
Getting Started¶
import asyncio
import aiosonic
import json
async def run():
"""Start."""
# Sample get request
response = await aiosonic.get('https://www.google.com/')
assert response.status_code == 200
assert 'Google' in (await response.text())
url = "https://postman-echo.com/post"
posted_data = {'foo': 'bar'}
# post data as multipart form
response = await aiosonic.post(url, data=posted_data)
assert response.status_code == 200
data = json.loads(await response.content())
assert data['form'] == posted_data
# posted as json
response = await aiosonic.post(url, json=posted_data)
assert response.status_code == 200
data = json.loads(await response.content())
assert data['json'] == posted_data
# Sample get request + timeout
from aiosonic.timeout import Timeouts
timeouts = Timeouts(
sock_read=10,
sock_connect=3
)
response = await aiosonic.get('https://www.google.com/', timeouts=timeouts)
assert response.status_code == 200
assert 'Google' in (await response.text())
print('success')
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
Benchmarks¶
The numbers speak for themselves
$ python tests/performance.py
doing tests...
{
"aiohttp": "1000 requests in 247.47 ms",
"requests": "1000 requests in 3625.10 ms",
"aiosonic": "1000 requests in 80.09 ms",
"aiosonic cyclic": "1000 requests in 128.71 ms",
"httpx": "1000 requests in 528.73 ms"
}
aiosonic is 209.00% faster than aiohttp
aiosonic is 4426.34% faster than requests
aiosonic is 60.70% faster than aiosonic cyclic
aiosonic is 560.17% faster than httpx