Welcome to aiosonic¶
Really Fast asynchronus HTTP 1.1 client, Support for http 2.0 is planned.
Current version is 0.7.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():
client = aiosonic.HttpClient()
# ##################
# Sample get request
# ##################
response = await client.get('https://www.google.com/')
assert response.status_code == 200
assert 'Google' in (await response.text())
# ##################
# Post data as multipart form
# ##################
url = "https://postman-echo.com/post"
posted_data = {'foo': 'bar'}
response = await client.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 client.post(url, json=posted_data)
assert response.status_code == 200
data = json.loads(await response.content())
assert data['json'] == posted_data
# ##################
# Sample request + timeout
# ##################
from aiosonic.timeout import Timeouts
timeouts = Timeouts(
sock_read=10,
sock_connect=3
)
response = await client.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...
{
"aiosonic": "1000 requests in 110.56 ms",
"aiosonic cyclic": "1000 requests in 207.75 ms",
"aiohttp": "1000 requests in 357.19 ms",
"requests": "1000 requests in 4274.21 ms",
"httpx": "1000 requests in 800.98 ms"
}
aiosonic is 223.05% faster than aiohttp
aiosonic is 3765.79% faster than requests
aiosonic is 87.90% faster than aiosonic cyclic
aiosonic is 624.45% faster than httpx