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

Uploaded Source

Built Distributions

aiohttp-0.22.2-cp35-cp35m-win_amd64.whl (131.1 kB view details)

Uploaded CPython 3.5m Windows x86-64

aiohttp-0.22.2-cp35-cp35m-win32.whl (129.9 kB view details)

Uploaded CPython 3.5m Windows x86

aiohttp-0.22.2-cp35-cp35m-manylinux1_x86_64.whl (147.9 kB view details)

Uploaded CPython 3.5m

aiohttp-0.22.2-cp35-cp35m-manylinux1_i686.whl (145.3 kB view details)

Uploaded CPython 3.5m

aiohttp-0.22.2-cp34-cp34m-win_amd64.whl (129.0 kB view details)

Uploaded CPython 3.4m Windows x86-64

aiohttp-0.22.2-cp34-cp34m-win32.whl (128.6 kB view details)

Uploaded CPython 3.4m Windows x86

aiohttp-0.22.2-cp34-cp34m-manylinux1_x86_64.whl (148.1 kB view details)

Uploaded CPython 3.4m

aiohttp-0.22.2-cp34-cp34m-manylinux1_i686.whl (145.4 kB view details)

Uploaded CPython 3.4m

File details

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

File metadata

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

File hashes

Hashes for aiohttp-0.22.2.tar.gz
Algorithm Hash digest
SHA256 30b588573c88942dac7438509731e197d74552060547b79cf6ace8564ee4b277
MD5 83f4ac27719909f946d995f09f353f04
BLAKE2b-256 7d326b3b5f1451a13fa4f2926e8c7c6c173a89637cfeda35927f94fff35d6827

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.2-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 dd438d181796895caf4a16ccc0d67daa83afb90d27e6a88c43c6d6313e73baa8
MD5 7aa9e7bd10284afd7a1e24eabfcc7150
BLAKE2b-256 0979730180c59e1b87ba873be6c7df376d29f487a39997eae605d15a43681897

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.2-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 91823bd19ab9921774796e816a3712ca1a0ff18a8b5b7b5f476f564e81007289
MD5 3bf83efbb2c16c48b9a9539a6aa39d0a
BLAKE2b-256 196c97f977d97837b275d59befb01fe99423af77c7e565a88f45b882f1575351

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.2-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 e54e455ca1ee1aa3679b85e9f1cf39da0f75d9a97f21f1b7e178199f1d3df021
MD5 6ce26a59ec25322c1b91245a3a8096ea
BLAKE2b-256 da28de6915c815e432f3cfe51318f08cff8d7cc1797f77c3d12228652fb340d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.2-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 7ef92062af933bf2e76b2981d3bc385cc90fa29fa34f9acf724d3b3592c36de5
MD5 322efc43e110b2b9043f4f071e73b23d
BLAKE2b-256 2e0c686f5079366de747eb5f4efb8b4ae0a0302f21e0ad90c359f427a1842202

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.2-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 9268b8be9d67507dacf85889558c7e839df3ce34e75a92660f31c3ee9e79748d
MD5 e1994ab0e4d4583a162a6ef77e79513e
BLAKE2b-256 83e8b17b35adec294ccddfc77b6cbd26bfeae05aaca3858366e0103dbcc61870

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.2-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 c4e7e4e4a5104efec7436df3d43a78b9db0b06616d28e1e567243c81d8d4b67e
MD5 7a168229729f17f84842cd7edf772095
BLAKE2b-256 e5d44baf793799b96598856164a439d0af8e092bede6ec7ac71f7061020c46b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.2-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 7a78705ec936de1ef7471cf7cbfa0a29773b48c0ace4063fa5a1d261807ed10b
MD5 5eb19034253d59ec72a8d72722561eb6
BLAKE2b-256 c7675b5ba568ef9fab6cf5983ed77f395cd5428a0a89e59f2910660065becf34

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.2-cp34-cp34m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 d1bae78790ad2595e039a793e64045191a63155426e7a7e0c99828bbabbd3059
MD5 7ff8592f60b7b658b196d857025b9d0e
BLAKE2b-256 5cbf2a1438145fe3223ac2acc8642fc7499180f19c20b2f4cad2082089efcb81

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