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

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.5 (08-02-2016)

  • Pin miltidict version to >=1.2.2

0.22.3 (07-26-2016)

  • Do not filter cookies if unsafe flag provided #1005

0.22.2 (07-23-2016)

  • Suppress CancelledError when Timeout raises TimeoutError #970

  • Don’t expose aiohttp.__version__

  • Add unsafe parameter to CookieJar #968

  • Use unsafe cookie jar in test client tools

  • Expose aiohttp.CookieJar name

0.22.1 (07-16-2016)

  • Large cookie expiration/max-age doesn’t break an event loop from now (fixes #967)

0.22.0 (07-15-2016)

  • 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

  • Add manylinux wheel builds

  • Dup a socket for sendfile usage #964

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

Uploaded Source

Built Distributions

aiohttp-0.22.5-cp35-cp35m-win_amd64.whl (131.3 kB view details)

Uploaded CPython 3.5m Windows x86-64

aiohttp-0.22.5-cp35-cp35m-win32.whl (130.0 kB view details)

Uploaded CPython 3.5m Windows x86

aiohttp-0.22.5-cp35-cp35m-manylinux1_x86_64.whl (148.1 kB view details)

Uploaded CPython 3.5m

aiohttp-0.22.5-cp35-cp35m-manylinux1_i686.whl (145.4 kB view details)

Uploaded CPython 3.5m

aiohttp-0.22.5-cp34-cp34m-win_amd64.whl (129.2 kB view details)

Uploaded CPython 3.4m Windows x86-64

aiohttp-0.22.5-cp34-cp34m-manylinux1_x86_64.whl (148.3 kB view details)

Uploaded CPython 3.4m

aiohttp-0.22.5-cp34-cp34m-manylinux1_i686.whl (145.6 kB view details)

Uploaded CPython 3.4m

File details

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

File metadata

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

File hashes

Hashes for aiohttp-0.22.5.tar.gz
Algorithm Hash digest
SHA256 9c51af030c866f91e18a219614e39d345db4483ed9860389d0536d74d04b0d3b
MD5 8541b6085fee8f8b51e0144df6470186
BLAKE2b-256 559d38fb3cb174f4723b50a3f0593e18a51418c9a73a7857fdcaee46b83ff1c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.5-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 b6989d0ca169e10daf2b45a16cbc9e3072037f108d54f15cb8fd023799c22533
MD5 f5637dc88fd6f7530ec113f8e30fa063
BLAKE2b-256 88b8b3d0c4a9f2b6e72e0d8d21242e75bea0108d21e987899e039989a55d3bd5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.5-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 35475c64ef54b5e89fb5f6df7010fb6a6d80a6e32bec737317b0dea54bd8dcf3
MD5 81eb7e54bb2ab1085d20519bc6900ee1
BLAKE2b-256 0915bb873845f1fb89681f25751877c638069620eadcd25015f6c3e0f81789cb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.5-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 174fc9bcf173c7984e2cf0419cec231c4a4c02db5a43782d66f0988dd2d00ffe
MD5 f941018bc68d5b6b73a44e573ce7c4af
BLAKE2b-256 e6d4a53c95098167834578202248341d7135e2b5d5888876827bfc504d69d61a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.5-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 eb310ea24f9eb775b90262e051fd5fd908497531881bfba312bfb80834bebf27
MD5 c7946d75ae80e417a3239ce2d1122732
BLAKE2b-256 2e8e1b282e4c7650a205db708e63f6e49bba52d8a7f99132ec86d2ca51b3ebf4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.5-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 bb00ea1e70361d74975e176046dcf1b6af23dfbd7e78f1bad6e1fff8fc44a549
MD5 4df53684a9d909ef92055bf606c142a4
BLAKE2b-256 37d3ac9e24481c685e184d7802bc881b17607d59b7f1686b0fe92d05f2787cf6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.5-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 615650ef881ab57c425f03b752b36b15dc6a2eac592917062736aebe98e19400
MD5 762675a2ffa34672e581ea14a6302b42
BLAKE2b-256 6880a8d56abedf8287ae7a8e2b9d62565f4a3b806f85c8080704d896a5a78797

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.5-cp34-cp34m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 6149596be7ee5ee7767e5dcf4613d52b245ac5eb3b24d313b9557f70efa63488
MD5 be35ae1c659d3f42115e7ba6102e02fb
BLAKE2b-256 f07125b7f236a5f699e0e23b0936628633e0ae00938cf374375a2fbc570bf368

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