Welcome to aiosonic¶
Really Fast asynchronus HTTP 1.1 client, Support for http 2.0 is planned.
Current version is 0.6.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...
httpx did break with: [Errno 24] Too many open files
{
"aiosonic": "1000 requests in 146.89 ms",
"aiosonic cyclic": "1000 requests in 146.17 ms",
"aiohttp": "1000 requests in 319.42 ms",
"requests": "1000 requests in 1766.96 ms"
}
aiosonic is 117.46% faster than aiohttp
aiosonic is 1102.93% faster than requests
aiosonic is -0.49% faster than aiosonic cyclic