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):
    with aiohttp.Timeout(10, loop=session.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')
        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(text=text)

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('/', handle)
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.2 (2016-09-22)

  • Make CookieJar compatible with 32-bit systems #1188

  • Add missing WSMsgType to web_ws.__all__, see #1200

  • Fix CookieJar ctor when called with loop=None #1203

  • Fix broken upper-casing in wsgi support #1197

1.0.1 (2016-09-16)

  • Restore aiohttp.web.MsgType alias for aiohttp.WSMsgType for sake of backward compatibility #1178

  • Tune alabaster schema.

  • Use text/html content type for displaying index pages by static file handler.

  • Fix AssertionError in static file handling #1177

  • Fix access log formats %O and %b for static file handling

  • Remove debug setting of GunicornWorker, use app.debug to control its debug-mode instead

1.0.0 (2016-09-16)

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

Uploaded Source

Built Distributions

aiohttp-1.0.2-cp35-cp35m-win_amd64.whl (133.6 kB view details)

Uploaded CPython 3.5m Windows x86-64

aiohttp-1.0.2-cp35-cp35m-win32.whl (132.4 kB view details)

Uploaded CPython 3.5m Windows x86

aiohttp-1.0.2-cp35-cp35m-manylinux1_x86_64.whl (150.5 kB view details)

Uploaded CPython 3.5m

aiohttp-1.0.2-cp35-cp35m-manylinux1_i686.whl (147.8 kB view details)

Uploaded CPython 3.5m

aiohttp-1.0.2-cp34-cp34m-win_amd64.whl (131.5 kB view details)

Uploaded CPython 3.4m Windows x86-64

aiohttp-1.0.2-cp34-cp34m-win32.whl (131.2 kB view details)

Uploaded CPython 3.4m Windows x86

aiohttp-1.0.2-cp34-cp34m-manylinux1_x86_64.whl (150.6 kB view details)

Uploaded CPython 3.4m

aiohttp-1.0.2-cp34-cp34m-manylinux1_i686.whl (147.9 kB view details)

Uploaded CPython 3.4m

File details

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

File metadata

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

File hashes

Hashes for aiohttp-1.0.2.tar.gz
Algorithm Hash digest
SHA256 d104a8e762debc1acc3fe40dbc4f0da4cace5a797a93d59c618673b390d3947c
MD5 c30b737446848d0d0067063d25cf2814
BLAKE2b-256 7545f81bcce8441a09cb7de7cfe54358452cf9eab6068cde239ea98ccf52c608

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.2-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 acb473768ff4b1467c05b17d463ad1a8f6576e296e2f8da7be03ba67589688a9
MD5 aa34118be7f6e1e614833c7bba470246
BLAKE2b-256 f115ab8870e99c5bb18ceafc72060dcc08726caff3a63123eca0fc21316d6e09

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.2-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 1fb04341c17eafa03654d38ab9a8ebd9425b0a924c0239c9e136be671f7fc700
MD5 aabf392930e3695a7a74673cb6c3591f
BLAKE2b-256 e12b5354cf681eb649ea6e93fb1a8117e48dd7c38c311fe8da2ee19c3024e216

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.2-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 d18e76023641bbd256813bcaddfd00a3b6b844dd9053c1053de4d611f75fedb5
MD5 22fed62ceacdd4eca6d3cd1e278ff90b
BLAKE2b-256 b4b77d75aa70d00c71722441ba8ebe6d53a94f34ea3ddc636ca2f3734afc66a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.2-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 e0c5a8a7bffb6d3c22588326a4531877deedc4a7eae5748d4c49945dc2513335
MD5 9e0e5213af7b2019a0289f3424815eac
BLAKE2b-256 d8894c6d5899b43cc178060c9f1f6ab9974b87483f6be897d0518a9556008cac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.2-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 45103496b3ae95ba9136f0532ca0b3746c14cefda1ea1aeac7bd3be71efcd1f4
MD5 50197424fa280e71ddd8ea6dd928eca1
BLAKE2b-256 70c3c83cb0404c5dbf5087dd8d6c816032e6863e093d0e81fc42431764bf8dda

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.2-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 f12f0be14da5379f798c2fb41ebf993de42373f48cab769988bdfa56241a9b05
MD5 08fe25e6770015ed9b067857464b1855
BLAKE2b-256 963858fc90df5a9716d98788f0a4b438198cf2658c51d7a2415a5f79dc214308

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.2-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 5d758c88dca9dd128b00a1ffd17d260b193f1cb52bc829cbe152e1b2207d1c50
MD5 20c73c76d08c18c94cac807c7a98a4d8
BLAKE2b-256 3d4183e3610c67e28613ae461eb81de5f6bc36da9213bc9fd165844b040b6de2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.0.2-cp34-cp34m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 928d886947235a810e625d49bfb90a3878d6e4cf9263444c98d7ddf619adf967
MD5 444c2f34cd507af2470e8df809b807c1
BLAKE2b-256 1684e2d095d31d6371034150b8cc66ad5025822ef1206a850e2055ce3e805590

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