Skip to main content

http client/server for asyncio

Project description

http client/server for asyncio

aiohttp logo https://travis-ci.org/KeepSafe/aiohttp.svg?branch=master https://codecov.io/gh/KeepSafe/aiohttp/branch/master/graph/badge.svg https://badge.fury.io/py/aiohttp.svg

Features

  • Supports both client and server side of HTTP protocol.

  • Supports both client and server Web-Sockets out-of-the-box.

  • Web-server has middlewares and pluggable routing.

Getting started

Client

To retrieve something from the web:

import aiohttp
import asyncio

async def fetch(session, url):
    with aiohttp.Timeout(10, loop=session.loop):
        async with session.get(url) as response:
            return await response.text()

async def main(loop):
    async with aiohttp.ClientSession(loop=loop) as session:
        html = await fetch(session, 'http://python.org')
        print(html)

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(loop))

Server

This is simple usage example:

from aiohttp import web

async def handle(request):
    name = request.match_info.get('name', "Anonymous")
    text = "Hello, " + name
    return web.Response(text=text)

async def wshandler(request):
    ws = web.WebSocketResponse()
    await ws.prepare(request)

    async for msg in ws:
        if msg.type == web.MsgType.text:
            ws.send_str("Hello, {}".format(msg.data))
        elif msg.type == web.MsgType.binary:
            ws.send_bytes(msg.data)
        elif msg.type == web.MsgType.close:
            break

    return ws


app = web.Application()
app.router.add_get('/echo', wshandler)
app.router.add_get('/', handle)
app.router.add_get('/{name}', handle)

web.run_app(app)

Note: examples are written for Python 3.5+ and utilize PEP-492 aka async/await. If you are using Python 3.4 please replace await with yield from and async def with @coroutine e.g.:

async def coro(...):
    ret = await f()

should be replaced by:

@asyncio.coroutine
def coro(...):
    ret = yield from f()

Documentation

https://aiohttp.readthedocs.io/

Discussion list

aio-libs google group: https://groups.google.com/forum/#!forum/aio-libs

Requirements

Optionally you may install the cChardet and aiodns libraries (highly recommended for sake of speed).

License

aiohttp is offered under the Apache 2 license.

Source code

The latest developer version is available in a github repository: https://github.com/KeepSafe/aiohttp

Benchmarks

If you are interested in by efficiency, AsyncIO community maintains a list of benchmarks on the official wiki: https://github.com/python/asyncio/wiki/Benchmarks

CHANGES

1.1.0 (2016-11-03)

  • Drop deprecated WSClientDisconnectedError (BACKWARD INCOMPATIBLE)

  • Use yarl.URL in client API. The change is 99% backward compatible but ClientResponse.url is an yarl.URL instance now. #1217

  • Close idle keep-alive connections on shutdown #1222

  • Modify regex in AccessLogger to accept underscore and numbers #1225

  • Use yarl.URL in web server API. web.Request.rel_url and web.Request.url are added. URLs and templates are percent-encoded now. #1224

  • Accept yarl.URL by server redirections #1278

  • Return yarl.URL by .make_url() testing utility #1279

  • Properly format IPv6 addresses by aiohttp.web.run_app #1139

  • Use yarl.URL by server API #1288

    • Introduce resource.url_for(), deprecate resource.url().

    • Implement StaticResource.

    • Inherit SystemRoute from AbstractRoute

    • Drop old-style routes: Route, PlainRoute, DynamicRoute, StaticRoute, ResourceAdapter.

  • Revert resp.url back to str, introduce resp.url_obj #1292

  • Raise ValueError if BasicAuth login has a “:” character #1307

  • Fix bug when ClientRequest send payload file with opened as open(‘filename’, ‘r+b’) #1306

  • Enhancement to AccessLogger (pass extra dict) #1303

  • Show more verbose message on import errors #1319

  • Added save and load functionality for CookieJar #1219

  • Added option on StaticRoute to follow symlinks #1299

  • Force encoding of application/json content type to utf-8 #1339

  • Fix invalid invocations of errors.LineTooLong #1335

  • Websockets: Stop async for iteration when connection is closed #1144

  • Ensure TestClient HTTP methods return a context manager #1318

  • Raise ClientDisconnectedError to FlowControlStreamReader read function if ClientSession object is closed by client when reading data. #1323

  • Document deployment without Gunicorn #1120

  • Add deprecation warning for MD5 and SHA1 digests when used for fingerprint of site certs in TCPConnector. #1186

  • Implement sub-applications #1301

  • Don’t inherit web.Request from dict but implement MutableMapping protocol.

  • Implement frozen signals

  • Don’t inherit web.Application from dict but implement MutableMapping protocol.

  • Support freezing for web applications

  • Accept access_log parameter in web.run_app, use None to disable logging

  • Don’t flap tcp_cork and tcp_nodelay in regular request handling. tcp_nodelay is still enabled by default.

  • Improve performance of web server by removing premature computing of Content-Type if the value was set by web.Response constructor.

    While the patch boosts speed of trivial web.Response(text=’OK’, content_type=’text/plain) very well please don’t expect significant boost of your application – a couple DB requests and business logic is still the main bottleneck.

  • Boost performance by adding a custom time service #1350

  • Extend ClientResponse with content_type and charset properties like in web.Request. #1349

  • Disable aiodns by default #559

  • Don’t flap tcp_cork in client code, use TCP_NODELAY mode by default.

  • Implement web.Request.clone() #1361

Project details


Release history Release notifications | RSS feed

This version

1.1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aiohttp-1.1.0.tar.gz (508.5 kB view details)

Uploaded Source

Built Distributions

aiohttp-1.1.0-cp35-cp35m-win_amd64.whl (136.4 kB view details)

Uploaded CPython 3.5m Windows x86-64

aiohttp-1.1.0-cp35-cp35m-win32.whl (135.1 kB view details)

Uploaded CPython 3.5m Windows x86

aiohttp-1.1.0-cp35-cp35m-manylinux1_x86_64.whl (153.2 kB view details)

Uploaded CPython 3.5m

aiohttp-1.1.0-cp35-cp35m-manylinux1_i686.whl (150.6 kB view details)

Uploaded CPython 3.5m

aiohttp-1.1.0-cp34-cp34m-win_amd64.whl (134.3 kB view details)

Uploaded CPython 3.4m Windows x86-64

aiohttp-1.1.0-cp34-cp34m-win32.whl (133.9 kB view details)

Uploaded CPython 3.4m Windows x86

aiohttp-1.1.0-cp34-cp34m-manylinux1_x86_64.whl (153.4 kB view details)

Uploaded CPython 3.4m

aiohttp-1.1.0-cp34-cp34m-manylinux1_i686.whl (150.7 kB view details)

Uploaded CPython 3.4m

File details

Details for the file aiohttp-1.1.0.tar.gz.

File metadata

  • Download URL: aiohttp-1.1.0.tar.gz
  • Upload date:
  • Size: 508.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for aiohttp-1.1.0.tar.gz
Algorithm Hash digest
SHA256 7a33afa92c5eab20252aba4aa184b6ec206bb718fcb51d1d0566d91f8b0dc9be
MD5 727a427b59cfe35f044fe9595ce5fe64
BLAKE2b-256 3f7e7035a96a1d5a68636d47ea48d0abda0e25994ef092167fd5dd12fe380cde

See more details on using hashes here.

File details

Details for the file aiohttp-1.1.0-cp35-cp35m-win_amd64.whl.

File metadata

File hashes

Hashes for aiohttp-1.1.0-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 1112a1b7b45f000a08f497fdff0ff97abcb02a2ef28dc19038af98261426a1d0
MD5 fc4b0e10c99bab3ef4a269338ef8aba9
BLAKE2b-256 663e549cdc5bdf6d444001b3f9e450226d3e878eb1b392182342f53718d07d99

See more details on using hashes here.

File details

Details for the file aiohttp-1.1.0-cp35-cp35m-win32.whl.

File metadata

File hashes

Hashes for aiohttp-1.1.0-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 c5144a89ed314d5435434294ca5bd4cd2a24c791158fb36695cdfb8970489209
MD5 dc03688d38bc28af418fcc8cac6e20fc
BLAKE2b-256 a57b73e7b75090fa1aebaf2768330d14775013ddf40fab6b5c244444fae0a4fe

See more details on using hashes here.

File details

Details for the file aiohttp-1.1.0-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for aiohttp-1.1.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 c05b95448deabdba71c1c28f778479f4c63140345f5635946f35b3211087f2b3
MD5 e0d1dc1eb0f6504059c9ee78128ddcae
BLAKE2b-256 9f21f7e5005b10443cbb1de87b30235e19ce5e1c7ef5c90baa9d315e03e458c3

See more details on using hashes here.

File details

Details for the file aiohttp-1.1.0-cp35-cp35m-manylinux1_i686.whl.

File metadata

File hashes

Hashes for aiohttp-1.1.0-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 cf5f6bd15edbfc21daf03e7d8eaa6fb452c05500b534b0999fade28a65b15973
MD5 ac7fccaa42d816619300f0fc320a6c94
BLAKE2b-256 da0dcc605614f69c7369ed27006c3f5944a53c07a57aecae0e7ad826373cb3d2

See more details on using hashes here.

File details

Details for the file aiohttp-1.1.0-cp34-cp34m-win_amd64.whl.

File metadata

File hashes

Hashes for aiohttp-1.1.0-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 20ca5752c5cd141f56ede1bc2817a7c2046af2f3b05d84f5510e4ffcb3e1b66b
MD5 90358088cdf070fbbff7020abe42fc5b
BLAKE2b-256 33f3828906ed9005dd965a988f6d94ad2dc13c92977f96c681416eba272e501a

See more details on using hashes here.

File details

Details for the file aiohttp-1.1.0-cp34-cp34m-win32.whl.

File metadata

File hashes

Hashes for aiohttp-1.1.0-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 ab005bbbfa8f0a980ecebcd8a632fdc6407298f1562f74cf01e566c0fabaf3aa
MD5 e591a9c220434cb787a854ce779d573d
BLAKE2b-256 802b23d819a0fdcad6cd306af3e2d9eeb091f244d48ed0bef362440c06c85b2a

See more details on using hashes here.

File details

Details for the file aiohttp-1.1.0-cp34-cp34m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for aiohttp-1.1.0-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 1276040895ab085827daa2c5a667caffce3531299a7679fda92ed50039b7d188
MD5 7f3fc5e5646e600734e547e68449d171
BLAKE2b-256 418deefa631c900b5d2b0ace40ec101ee4c8f2079d954a1263984cd33ba14224

See more details on using hashes here.

File details

Details for the file aiohttp-1.1.0-cp34-cp34m-manylinux1_i686.whl.

File metadata

File hashes

Hashes for aiohttp-1.1.0-cp34-cp34m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 06d751fbe6e50990df022babc5b289508da02af40045cd2cef0a44666bb7112a
MD5 09244b8673db72d91f4714e05a1d0cd8
BLAKE2b-256 55c964145ad328a11747a59da4b7cc0e48f513921159b0223ad22023c559b99d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page