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.0 (08-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.0.tar.gz (474.3 kB view details)

Uploaded Source

Built Distributions

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

Uploaded CPython 3.5m Windows x86-64

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

Uploaded CPython 3.5m Windows x86

aiohttp-0.22.0-cp35-cp35m-manylinux1_x86_64.whl (147.5 kB view details)

Uploaded CPython 3.5m

aiohttp-0.22.0-cp35-cp35m-manylinux1_i686.whl (144.8 kB view details)

Uploaded CPython 3.5m

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

Uploaded CPython 3.4m Windows x86-64

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

Uploaded CPython 3.4m Windows x86

aiohttp-0.22.0-cp34-cp34m-manylinux1_x86_64.whl (147.6 kB view details)

Uploaded CPython 3.4m

aiohttp-0.22.0-cp34-cp34m-manylinux1_i686.whl (144.9 kB view details)

Uploaded CPython 3.4m

File details

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

File metadata

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

File hashes

Hashes for aiohttp-0.22.0.tar.gz
Algorithm Hash digest
SHA256 08d2f8f4ddde904548e0da82329be63a57903ec5b8cd962fab607c5875c8d955
MD5 d260682e79e8a9792012d9195fe41927
BLAKE2b-256 4e72d3cf089212019330003607d875e9adca2c71dbf56a8a14bb414c305534eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 9ab261b8864eb7a78867b92d7abf3bea0b134ecc97e5f5edb287219f878a4db7
MD5 9199fb215ace72967c507c72f9f64fb3
BLAKE2b-256 9602c767873320b1475e300b7d9c66c8282f75c2feedcc03076f6e07c442edf1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 b5724d1da2a16897a8ad0533d2e4d18ee15fc973521e6ccf3b0b8998649bc7ba
MD5 5563dfc3f37416c2925c803874a0a1f7
BLAKE2b-256 56837d56e875f3b36baaa34a403de4641d0c65b5388b69085057e774173a216a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 a7f9438b554a21eb76ab5886d2bfbb7f4a722d2723500253462e486487f5462c
MD5 942ee3cf2b86f6620afa14ebf9ee1ab0
BLAKE2b-256 dae6aab3f96be0883cf3f12edbe4a8e138712c6cf99037390029c8ee3594131b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 fc79355ea0f29eda0e33d159d0dd8c28e6d710785d99e70731f17c1fa0ab7bed
MD5 5de5e9b97bb49120e55a60a80ec204f2
BLAKE2b-256 05de8816f85d8ee9c091dd93952d57b81d1a874d3de9dc4ea3619377faf6b7c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 034c738f406438d2cb6b5c02b53f8ce3de07083e3d0cb3190584508dd5fbd7d2
MD5 aa64d017cbff12b0b24046a365672366
BLAKE2b-256 2625821210935278c516dce2d1b9893c1eb6c701c6c5e48232c5816a099b8e30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 ad904936045e4876c14e6484b3b0fdae4be276fb577ee6ae2695dc21035690f5
MD5 491c2110cd5d659bfe57ab29b000ae15
BLAKE2b-256 99670caeb62997a88a1e25694f23042ed0f497c947a07be5c374da5c8848525a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 5831c27aa16b978d88b3018b31291973787750af10c886cfebf6b5475759645e
MD5 56e87da62a41e52833ea68cbbee1a402
BLAKE2b-256 6487aa772573c1a4ee7566dcd8b7737b5b81ab6ea9a7b93297948670d395d296

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0-cp34-cp34m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 355614f983226a534ece659ec3fc30d921b57404a9fe18e32121c274eb2477cb
MD5 3ec6aa8bdd606883963a2c26f5dce682
BLAKE2b-256 f29a3498de463f74c8c2adf97464e558650713f34528d7d560627fc010e35d35

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