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://codecov.io/gh/KeepSafe/aiohttp/branch/master/graph/badge.svg 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, *, loop):
    with aiohttp.Timeout(10, loop=loop):
        async with session.get(url) as response:
            return await response.text()

async def main(loop):
    async with aiohttp.ClientSession(loop=loop) as session:
        html = await fetch(session, 'http://python.org', loop=loop)
        print(html)

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(loop))

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.type == web.MsgType.text:
            ws.send_str("Hello, {}".format(msg.data))
        elif msg.type == web.MsgType.binary:
            ws.send_bytes(msg.data)
        elif msg.type == web.MsgType.close:
            break

    return ws


app = web.Application()
app.router.add_get('/echo', wshandler)
app.router.add_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()

should 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 the cChardet and aiodns libraries (highly recommended for sake of speed).

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

1.0.0 (09-16-2016)

  • Change default size for client session’s connection pool from unlimited to 20 #977

  • Add IE support for cookie deletion. #994

  • Remove deprecated WebSocketResponse.wait_closed method (BACKWARD INCOMPATIBLE)

  • Remove deprecated force parameter for ClientResponse.close method (BACKWARD INCOMPATIBLE)

  • Avoid using of mutable CIMultiDict kw param in make_mocked_request #997

  • Make WebSocketResponse.close a little bit faster by avoiding new task creating just for timeout measurement

  • Add proxy and proxy_auth params to client.get() and family, deprecate ProxyConnector #998

  • Add support for websocket send_json and receive_json, synchronize server and client API for websockets #984

  • Implement router shourtcuts for most useful HTTP methods, use app.router.add_get(), app.router.add_post() etc. instead of app.router.add_route() #986

  • Support SSL connections for gunicorn worker #1003

  • Move obsolete examples to legacy folder

  • Switch to multidict 2.0 and title-cased strings #1015

  • {FOO}e logger format is case-sensitive now

  • Fix logger report for unix socket 8e8469b

  • Rename aiohttp.websocket to aiohttp._ws_impl

  • Rename aiohttp.MsgType tp aiohttp.WSMsgType

  • Introduce aiohttp.WSMessage officially

  • Rename Message -> WSMessage

  • Remove deprecated decode param from resp.read(decode=True)

  • Use 5min default client timeout #1028

  • Relax HTTP method validation in UrlDispatcher #1037

  • Pin minimal supported asyncio version to 3.4.2+ (loop.is_close() should be present)

  • Remove aiohttp.websocket module (BACKWARD IMCOMPATIBLE) Please use high-level client and server approaches

  • Link header for 451 status code is mandatory

  • Fix test_client fixture to allow multiple clients per test #1072

  • make_mocked_request now accepts dict as headers #1073

  • Add Python 3.5.2/3.6+ compatibility patch for async generator protocol change #1082

  • Improvement test_client can accept instance object #1083

  • Simplify ServerHttpProtocol implementation #1060

  • Add a flag for optional showing directory index for static file handling #921

  • Define web.Application.on_startup() signal handler #1103

  • Drop ChunkedParser and LinesParser #1111

  • Call Application.startup in GunicornWebWorker #1105

  • Fix client handling hostnames with 63 bytes when a port is given in the url #1044

  • Implement proxy support for ClientSession.ws_connect #1025

  • Return named tuple from WebSocketResponse.can_prepare #1016

  • Fix access_log_format in GunicornWebWorker #1117

  • Setup Content-Type to application/octet-stream by default #1124

  • Deprecate debug parameter from app.make_handler(), use Application(debug=True) instead #1121

  • Remove fragment string in request path #846

  • Use aiodns.DNSResolver.gethostbyname() if available #1136

  • Fix static file sending on uvloop when sendfile is available #1093

  • Make prettier urls if query is empty dict #1143

  • Fix redirects for HEAD requests #1147

  • Default value for StreamReader.read_nowait is -1 from now #1150

  • aiohttp.StreamReader is not inherited from asyncio.StreamReader from now (BACKWARD INCOMPATIBLE) #1150

  • Streams documentation added #1150

  • Add multipart coroutine method for web Request object #1067

  • Publish ClientSession.loop property #1149

  • Fix static file with spaces #1140

  • Fix piling up asyncio loop by cookie expiration callbacks #1061

  • Drop Timeout class for sake of async_timeout external library. aiohttp.Timeout is an alias for async_timeout.timeout

  • use_dns_cache parameter of aiohttp.TCPConnector is True by default (BACKWARD INCOMPATIBLE) #1152

  • aiohttp.TCPConnector uses asynchronous DNS resolver if available by default (BACKWARD INCOMPATIBLE) #1152

  • Conform to RFC3986 - do not include url fragments in client requests #1174

  • Drop ClientSession.cookies (BACKWARD INCOMPATIBLE) #1173

  • Refactor AbstractCookieJar public API (BACKWARD INCOMPATIBLE) #1173

  • Fix clashing cookies with have the same name but belong to different domains (BACKWARD INCOMPATIBLE) #1125

  • Support binary Content-Transfer-Encoding #1169

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

Uploaded Source

Built Distributions

aiohttp-1.0.0-cp35-cp35m-win_amd64.whl (133.0 kB view details)

Uploaded CPython 3.5m Windows x86-64

aiohttp-1.0.0-cp35-cp35m-win32.whl (131.8 kB view details)

Uploaded CPython 3.5m Windows x86

aiohttp-1.0.0-cp35-cp35m-manylinux1_x86_64.whl (149.9 kB view details)

Uploaded CPython 3.5m

aiohttp-1.0.0-cp35-cp35m-manylinux1_i686.whl (147.2 kB view details)

Uploaded CPython 3.5m

aiohttp-1.0.0-cp34-cp34m-win_amd64.whl (130.9 kB view details)

Uploaded CPython 3.4m Windows x86-64

aiohttp-1.0.0-cp34-cp34m-win32.whl (130.6 kB view details)

Uploaded CPython 3.4m Windows x86

aiohttp-1.0.0-cp34-cp34m-manylinux1_x86_64.whl (150.0 kB view details)

Uploaded CPython 3.4m

aiohttp-1.0.0-cp34-cp34m-manylinux1_i686.whl (147.3 kB view details)

Uploaded CPython 3.4m

File details

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

File metadata

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

File hashes

Hashes for aiohttp-1.0.0.tar.gz
Algorithm Hash digest
SHA256 1a7d4416bcf80459c876a83b2bf61ddc313609322d17875b37a0142ec743810d
MD5 d5746d69eb6ecee0d865845aaba5a2e5
BLAKE2b-256 3c7874152807c83b4689f86133ee47136d6c62301399cd713e21d1d3e6caab26

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.0-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 b4f578a7b01ce9ca7b238ca0c3454dc5fc1d39e791b0cdf84d1c8ca9647c4dc2
MD5 8c4c27be3ee483aafb0b56be85e17188
BLAKE2b-256 43c07310952067a2268322312b22462be6ad7791784fbde49cb636013da83272

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.0-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 1ea46c28afacdcf67c01d78a7565e8782fc25aefc772394a388b17e574745325
MD5 1e363b4f32b0336f7a82eee899c9b6ed
BLAKE2b-256 05e457559dd9f818a0b832a54c23d90e708b2dfe1d7953d252039fff6ff4a8c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 57e89c7e71ca18b5fc64a2261d56504b646f9bfc42320f600fd74cf6b727bce2
MD5 12e2c47bf37d84091fae1bb56b43f8e2
BLAKE2b-256 1fcb9854f19dc635738f9fd34b4405afee2638a68e0c9f279f3cfc2e35bb6233

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.0-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 6d17240761445cff90d84ac876897d567448df3b6a49f2ce51a3a5fce264a88e
MD5 238de895426c4bec871b36fbaa243272
BLAKE2b-256 5c7a4fc966c0a24eb7f739257f7116589fdcfc764c53e48d797734484aec0924

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.0-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 880c205e344a05a9454623ff44de50370b20c99b75241614304ddb83a641b245
MD5 2efe45177e525e848d75453d19c93310
BLAKE2b-256 de9f91869833a02df0c8fba8f31231ed18045cb0269ada0684e818c50e2a2978

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.0-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 b50d180ef587d24725c864677f9a381583c7ea538e4cdcbe6cf277d88f93f9ba
MD5 5fa4f13ab0d5bbe46bb2650c777fa989
BLAKE2b-256 08f0232efa1b54cd101d9dd3e524599bb44a111ed8ca34f0613f0c8b139dda2d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.0-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 67555e4eb5d53857c8ce72eba713a83ef86c66b6fa19c19783d59178ccea2453
MD5 43c1f8fe7004b226a14b750c9ff06621
BLAKE2b-256 cf92605f8d9420fa136f81ae1eb7000131f4d1d22a300ee0be4055ea63370b9b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.0-cp34-cp34m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 f0e98091d377c80648cea31cf977a8b4261db00e17d93ad8d6b5d5421a83a706
MD5 0dba9aff04089cbbb5f79d00e9c6201c
BLAKE2b-256 7ec9e89732bdc6a40333e532a2935815e7b88000807c3792e97abc22fcc4c38b

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