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 (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

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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.5m Windows x86-64

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

Uploaded CPython 3.5m Windows x86

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

Uploaded CPython 3.4m Windows x86-64

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

Uploaded CPython 3.4m Windows x86

File details

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

File metadata

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

File hashes

Hashes for aiohttp-0.22.0b0.tar.gz
Algorithm Hash digest
SHA256 4e69fc4354918f994c2b66844d2ef70f4ee607e2cc10aebf1b4336c1be47aee0
MD5 b72503e492a6c64fa6c1ae13586410aa
BLAKE2b-256 69b38ada8696fc3fd414610eb120d4a02760334e8377fda2581906904902a15b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b0-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 6f66eef926ef487b0e2e4be1ad1bae2d2eb8bb379635aedd49769c2807a54bf3
MD5 d9b66f9d18f59cdf8a296ee06aedee3c
BLAKE2b-256 c87a62d6aca8c25f4f53ffd992f2228c256c01f02272537ff5786340491b216c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b0-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 f19339a15a599b5ccf8bc9f287f4ca7bbb745b823853208ac6166e397a7f0c40
MD5 29ad5044e054f3dc0c451c2098e5459f
BLAKE2b-256 5f02267560edd7e505f805b1bcaabb5042f6a3cd3d56045d80a9b38dd85405d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b0-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 f6454d63c82d558aa3f20b16eb3d96689899df8e0f5b5b6c2c227e432f1b28f8
MD5 6052e6f092162ad3b9258bd8b7b72b3e
BLAKE2b-256 30b73217f67ec5b0ef4df52de35a09b5a162e29f0d0ee3ff39eb68dfba083cdf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b0-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 06d23d950fb451e461df1342f22090598871a16a5dfd98f72d34b442d6146308
MD5 36c251680e2cf75750e6f63c731372c9
BLAKE2b-256 9435bad6b9a90f934bdb6438c23235268ffe8c6a37a50c20ce097526bb5931ad

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