Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

http client/server for asyncio

aiohttp logo https://travis-ci.org/KeepSafe/aiohttp.svg?branch=master https://coveralls.io/repos/KeepSafe/aiohttp/badge.svg?branch=master&service=github 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):
        async with session.get(url) as response:
            return await response.text()

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    with aiohttp.ClientSession(loop=loop) as session:
        html = loop.run_until_complete(
            fetch(session, 'http://python.org'))
        print(html)

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(body=text.encode('utf-8'))

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

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

    return ws


app = web.Application()
app.router.add_route('GET', '/echo', wshandler)
app.router.add_route('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()

shoud 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 cChardet library: https://pypi.python.org/pypi/cchardet/1.0.0

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

0.22.0 (XX-XX-XXXX)

  • Fix bug in serving static directory #803

  • Fix command line arg parsing #797

  • Fix a documentation chapter about cookie usage #790

  • Handle empty body with gzipped encoding #758

  • Support 451 Unavailable For Legal Reasons http status #697

  • Fix Cookie share example and few small typos in docs #817

  • UrlDispatcher.add_route with partial coroutine handler #814

  • Optional support for aiodns #728

  • Add ServiceRestart and TryAgainLater websocket close codes #828

  • Fix prompt message for web.run_app #832

  • Allow to pass None as a timeout value to disable timeout logic #834

  • Fix leak of connection slot during connection erro #835

  • Gunicorn worker with uvloop support aiohttp.worker.GunicornUVLoopWebWorker #878

  • Don’t send body in response to HEAD request #838

  • Skip the preamble in MultipartReader #881

  • Implement BasicAuth decode classmethod. #744

  • Don’t crash logger when transport is None #889

  • Use a create_future compatibility wrapper instead of creating Futures directly #896

  • Add test utilities to aiohttp #902

  • Improve Request.__repr__ #875

  • Skip DNS resolving if provided host is already an ip address #874

  • Add headers to ClientSession.ws_connect #785

  • Document that server can send pre-compressed data #906

  • Don’t add Content-Encoding and Transfer-Encoding if no body #891

  • Add json() convenience methods to websocket message objects #897

  • Add client_resp.raise_for_status() #908

  • Implement cookie filter #799

  • Include an example of middleware to handle error pages #909

  • Fix error handling in StaticFileMixin #856

  • Add mocked request helper #900

  • Fix empty ALLOW Response header for cls based View #929

  • Respect CONNECT method to implement a proxy server #847

  • Add pytest_plugin #914

  • Add tutorial

  • Add backlog option to support more than 128 (default value in “create_server” function) concurrent connections #892

  • Allow configuration of header size limits #912

  • Separate sending file logic from StaticRoute dispatcher #901

  • Drop deprecated share_cookies connector option (BACKWARD INCOMPATIBLE)

  • Drop deprecated support for tuple as auth paramter. Use aiohttp.BasicAuth instead (BACKWARD INCOMPATIBLE)

  • Remove deprecated request.payload property, use content instead. (BACKWARD INCOMPATIBLE)

  • Drop all mentions about api changes in documentaion for versions older than 0.16

  • Allow to override default cookie jar #963

Download files

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

Source Distribution

aiohttp-0.22.0b1.tar.gz (474.1 kB view details)

Uploaded Source

Built Distributions

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

aiohttp-0.22.0b1-cp35-cp35m-win_amd64.whl (130.4 kB view details)

Uploaded CPython 3.5mWindows x86-64

aiohttp-0.22.0b1-cp35-cp35m-win32.whl (129.2 kB view details)

Uploaded CPython 3.5mWindows x86

aiohttp-0.22.0b1-cp34-cp34m-win_amd64.whl (128.3 kB view details)

Uploaded CPython 3.4mWindows x86-64

aiohttp-0.22.0b1-cp34-cp34m-win32.whl (128.0 kB view details)

Uploaded CPython 3.4mWindows x86

File details

Details for the file aiohttp-0.22.0b1.tar.gz.

File metadata

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

File hashes

Hashes for aiohttp-0.22.0b1.tar.gz
Algorithm Hash digest
SHA256 2eaebcc3bec5a49746b48244983006be2d9348bfb5c9d18c5178b3c79647b2d6
MD5 47a778dcfad79fc8471498e3ffa1f137
BLAKE2b-256 a21d5fad66b00db9ee1f0dd452d7eaac7294d2d2c34ee002a806b3dfac9b96fa

See more details on using hashes here.

File details

Details for the file aiohttp-0.22.0b1-cp35-cp35m-win_amd64.whl.

File metadata

File hashes

Hashes for aiohttp-0.22.0b1-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 dc8756806086381aacf6a1630acecfe5bc8168b32ac0d8f8617c0746a3a47a42
MD5 f6f9d60483fef7a5288ef4c838da7f8a
BLAKE2b-256 85529ac83a7f9e03c513a13bb6a7a2ac58e10506f9ee4ebcf1aa1e2e621928bd

See more details on using hashes here.

File details

Details for the file aiohttp-0.22.0b1-cp35-cp35m-win32.whl.

File metadata

File hashes

Hashes for aiohttp-0.22.0b1-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 bbd8621475147beedc1062d7ebf004d3c59723c793dfef9bdbc7cef9692784b0
MD5 b57b279680dd6df6fb0d52ff6ed877be
BLAKE2b-256 6005b419c7c4888250f6e8bfb459a07a2318806f29053ff4d1670d02e5b8048a

See more details on using hashes here.

File details

Details for the file aiohttp-0.22.0b1-cp34-cp34m-win_amd64.whl.

File metadata

File hashes

Hashes for aiohttp-0.22.0b1-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 af79f3b28aee02064328ce8d204c2d0ff651090f6b94131e93c5ed22fe5023ec
MD5 2bb2c565a8764b8c65e7accc9e3196f0
BLAKE2b-256 ab35274d3466bada71aa8bd6c34985b0db6ac141da720d5c89ab78fcf1bdec47

See more details on using hashes here.

File details

Details for the file aiohttp-0.22.0b1-cp34-cp34m-win32.whl.

File metadata

File hashes

Hashes for aiohttp-0.22.0b1-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 944a3f8afebdbf71149313edc5e3b67500c2108525dbb3ffbf1907c8857a5664
MD5 43c6a2bb82a0fb3a7e15d51a7162eded
BLAKE2b-256 a441ab4b94a28413b6651a503bf5e5e390b0cffd014942c7f668c3086253a8d5

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