Skip to main content

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.5 (2016-11-16)

  • Fix static file serving in fallback mode #1401

1.1.4 (2016-11-14)

  • Make TestServer.make_url compatible with yarl.URL #1389

  • Generate informative exception on redirects from server which doesn’t provide redirection headers #1396

1.1.3 (2016-11-10)

  • Support root resources for sub-applications #1379

1.1.2 (2016-11-08)

  • Allow starting variables with an underscore #1379

  • Properly process UNIX sockets by gunicorn worker #1375

  • Fix ordering for FrozenList

  • Don’t propagate pre and post signals to sub-application #1377

1.1.1 (2016-11-04)

  • Fix documentation generation #1120

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

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.5.tar.gz (510.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

aiohttp-1.1.5-cp35-cp35m-win_amd64.whl (137.1 kB view details)

Uploaded CPython 3.5mWindows x86-64

aiohttp-1.1.5-cp35-cp35m-win32.whl (135.9 kB view details)

Uploaded CPython 3.5mWindows x86

aiohttp-1.1.5-cp35-cp35m-manylinux1_x86_64.whl (154.0 kB view details)

Uploaded CPython 3.5m

aiohttp-1.1.5-cp35-cp35m-manylinux1_i686.whl (151.3 kB view details)

Uploaded CPython 3.5m

aiohttp-1.1.5-cp34-cp34m-win_amd64.whl (135.0 kB view details)

Uploaded CPython 3.4mWindows x86-64

aiohttp-1.1.5-cp34-cp34m-win32.whl (134.7 kB view details)

Uploaded CPython 3.4mWindows x86

aiohttp-1.1.5-cp34-cp34m-manylinux1_x86_64.whl (154.1 kB view details)

Uploaded CPython 3.4m

aiohttp-1.1.5-cp34-cp34m-manylinux1_i686.whl (151.4 kB view details)

Uploaded CPython 3.4m

File details

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

File metadata

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

File hashes

Hashes for aiohttp-1.1.5.tar.gz
Algorithm Hash digest
SHA256 e6c5a8008ab8bbdb706034bedc91835ed820cdc2367ddea9142697612908df84
MD5 d3f7518ea20f1681f37249d926b3d800
BLAKE2b-256 5f60afb29b5712ade524efdce339e2a6a0cb69c44115804ab5d4e976bf3f1983

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 91a5d6f5f8083e0339e02f21a59d873dadd2a003c5c5bb360cce2d23155980ca
MD5 4705100852cb0948c9b01e442c51f506
BLAKE2b-256 5db6deaa802e95f6433a4b61ae2d3aef12f1eb00e2f3200076f491f5d0461279

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 4a2ac388457d55861e42a123d5307cd8ea6d02a8665065daee19ab7239a9e61d
MD5 82ea0edf5b5ca470cf1e5b435da39d24
BLAKE2b-256 f6dc34db27e6ff34fede41c08cc6e563dc3b48818c0e2c53eb36b1cfbf8b5e83

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 9bdc4fe5b4907f4a80caf46b173fe6fd3ca138477f9220ab22d009c328c6edf2
MD5 cb6b878e5f02c3b46f23eec70c05e29c
BLAKE2b-256 de8dacbdd6862d7a94e08855ad1c18964e6370a4fb8c58fd92e0fbeb152882d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 af3d548eea3dc366c0559a7f43820d7f4d8cba0be824b2bbdaef95be9e1361e4
MD5 7ea5b12f6004a750fb1248094b27877e
BLAKE2b-256 08a5cb7e38f43fa974efcbc6c72291df154b6623d16c27f2037e04cae75dde73

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 d034760f4fc3ff8fa61fe41ca7d36e8782e49d7f90e7567484a11afd7e0fb4ee
MD5 0c5d04e0913f33dba6c56c92995a0364
BLAKE2b-256 b6e43dd60792bf4978f1c2af335cd964661f5f19f780a4fd7b640a66b9273bfc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 97f6f974029432a42e65c7084b8c4221baaf8a1be0eb5c4817be5538017a76ab
MD5 070266f33c533ef7b5d6b41bf462ec0a
BLAKE2b-256 7e5f2a2ec3d0d2dd4f801091993040421d897afb0004828d67345dcdf7423cee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 374832ea71c292a221e0bf7e0dde193db19807a1286dca0183eb7bfa794479f9
MD5 febecf2e21a6b2517bb7308fab6cc629
BLAKE2b-256 35ca9a7279d1cd5b442496d078d10db3a9db929d9281e29e374b4bd9801c74de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp34-cp34m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 f9bf35edb7e1483e06f6c887ed2a7a823acdb8c8f0daf64d08d7cafe628a0aec
MD5 f7971cd6d92b140fc1d02cf029f90d70
BLAKE2b-256 4dedcfd300ec84a0164d30fac7ed9bf409fc247113f6650d4d3fddcec40cb9d2

See more details on using hashes here.

Release history Release notifications | RSS feed

Supported by

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