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://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

http://aiohttp.readthedocs.org/

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.21.6 (05-05-2016)

  • Drop initial query parameters on redirects #853

0.21.5 (03-22-2016)

  • Fix command line arg parsing #797

0.21.4 (03-12-2016)

  • Fix ResourceAdapter: dont add method to allowed if resource is not match #826

  • Fix Resouce: append found method to returned allowed methods

0.21.2 (02-16-2016)

  • Fix a regression: support for handling ~/path in static file routes was broken #782

0.21.1 (02-10-2016)

  • Make new resources classes public #767

  • Add router.resources() view

  • Fix cmd-line parameter names in doc

0.21.0 (02-04-2016)

  • Introduce on_shutdown signal #722

  • Implement raw input headers #726

  • Implement web.run_app utility function #734

  • Introduce on_cleanup signal

  • Deprecate Application.finish() / Application.register_on_finish() in favor of on_cleanup.

  • Get rid of bare aiohttp.request(), aiohttp.get() and family in docs #729

  • Deprecate bare aiohttp.request(), aiohttp.get() and family #729

  • Refactor keep-alive support #737:

    • Enable keepalive for HTTP 1.0 by default

    • Disable it for HTTP 0.9 (who cares about 0.9, BTW?)

    • For keepalived connections

      • Send Connection: keep-alive for HTTP 1.0 only

      • don’t send Connection header for HTTP 1.1

    • For non-keepalived connections

      • Send Connection: close for HTTP 1.1 only

      • don’t send Connection header for HTTP 1.0

  • Add version parameter to ClientSession constructor, deprecate it for session.request() and family #736

  • Enable access log by default #735

  • Deprecate app.router.register_route() (the method was not documented intentionally BTW).

  • Deprecate app.router.named_routes() in favor of app.router.named_resources()

  • route.add_static accepts pathlib.Path now #743

  • Add command line support: $ python -m aiohttp.web package.main #740

  • FAQ section was added to docs. Enjoy and fill free to contribute new topics

  • Add async context manager support to ClientSession

  • Document ClientResponse’s host, method, url properties

  • Use CORK/NODELAY in client API #748

  • ClientSession.close and Connector.close are coroutines now

  • Close client connection on exception in ClientResponse.release()

  • Allow to read multipart parts without content-length specified #750

  • Add support for unix domain sockets to gunicorn worker #470

  • Add test for default Expect handler #601

  • Add the first demo project

  • Rename loader keyword argument in web.Request.json method. #646

  • Add local socket binding for TCPConnector #678

Project details


Release history Release notifications | RSS feed

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

Uploaded Source

Built Distributions

aiohttp-0.21.6-cp35-cp35m-win_amd64.whl (249.1 kB view details)

Uploaded CPython 3.5m Windows x86-64

aiohttp-0.21.6-cp35-cp35m-win32.whl (237.8 kB view details)

Uploaded CPython 3.5m Windows x86

aiohttp-0.21.6-cp34-cp34m-win_amd64.whl (246.3 kB view details)

Uploaded CPython 3.4m Windows x86-64

aiohttp-0.21.6-cp34-cp34m-win32.whl (238.4 kB view details)

Uploaded CPython 3.4m Windows x86

File details

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

File metadata

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

File hashes

Hashes for aiohttp-0.21.6.tar.gz
Algorithm Hash digest
SHA256 8709c6d4b7735705ef46e0d5416083f1e92d9a9ab18e2b4c7f7944e831b73428
MD5 d7f63e51bc86a61d9bccca13986c3855
BLAKE2b-256 04789faeb8b5b1d53e8c81c99764412c2225d982943e4261bba2c6f725e15fce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.6-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 7d1ec0f5d7324ecd0ce305c1194a9380e16de0816e47cfc0801df048e1cffc0c
MD5 7ad385addbdf57148148e0701e56c365
BLAKE2b-256 de0ae442d8f4cf2919556683098921cfadbc64fc2c25d2e2800c576943faae02

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.6-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 7f4a4a0b6438456af386183eb90c586d6c482085cf68af59afb0067f44886e08
MD5 1d020a7f3d912d0087812e6d77e2011e
BLAKE2b-256 decfd87eeb6006fc4ab80a91c66f5aacbd40105f88302efb062155c6f7b96071

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.6-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 dfcf66352acf0c6496e624fe3be412a5a68c4f2c212c142c53ac14b853e4e56a
MD5 faa71ce68d0ef516c34a8fef2e7b6e16
BLAKE2b-256 a37cb8313428e413a60b70900aadd4ec01ffa05b84f311220c74dcef0056dcb0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.6-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 fb53adcb92c5b8b8197d0c93a72301b55d0a6220c0ef337dff849ca73ad78615
MD5 0340a7f612afa0eb6ed4dc8fad119b3d
BLAKE2b-256 bf5a72bd54859fc00698cc20f82af5584498c2cc675a4aaa19b83d5d578f84ec

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