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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.5m Windows x86-64

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

Uploaded CPython 3.5m Windows x86

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

Uploaded CPython 3.4m Windows x86-64

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

Uploaded CPython 3.4m Windows x86

File details

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

File metadata

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

File hashes

Hashes for aiohttp-0.22.0b5.tar.gz
Algorithm Hash digest
SHA256 3ea3aa3e130d63292f5ddc54de64364b02b801c0f2e1a71c11da71b9b5495f5c
MD5 d04042c3a8f575e18c683c837767b8b1
BLAKE2b-256 66b8b5d2cd240a8e8014126327047fc0c60524bc03c041dadd00d61d7e76c33f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b5-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 731bfba964b1dc48de727f9ec753d924f70b23235c32ad989fa24a2274d02250
MD5 b60eb4ed21713c52953f41ee069216c1
BLAKE2b-256 a9fa9fa99c3230b14bdd0a7633ee83536282fe99717470ef2435948b03503787

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b5-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 3d3b61f5290f2a306827912db9e4eb85b621214c3166e83b2170a55aa5b5e294
MD5 52ca9f662085dc9f752b8b6ba430576f
BLAKE2b-256 7423f12770c538e451b32bdef454dd186858926a82ed23328b958ada43db8b27

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b5-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 681f304f548e217e75345dc94d5fd67394c2360055aee5aea24317c5370a2c5f
MD5 87e1948585632e46f25617de4cffc9ba
BLAKE2b-256 734d607957f307c54d59da255c880b9342a8cb604361044dc9bc3cbb916d3e1c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b5-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 fc3b8867c1a7fd69302461397d3293b1cf500f3234ec9b2d524844d02ebeae05
MD5 2d4adfc045771cb1f079499cbf206f25
BLAKE2b-256 dd16eea750e02fd199d489cdbff1a3ac980e37af9db96ed283be4e3b67f655aa

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