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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.5m Windows x86-64

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

Uploaded CPython 3.5m Windows x86

aiohttp-0.22.0b6-cp35-cp35m-manylinux1_x86_64.whl (147.3 kB view details)

Uploaded CPython 3.5m

aiohttp-0.22.0b6-cp35-cp35m-manylinux1_i686.whl (144.6 kB view details)

Uploaded CPython 3.5m

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

Uploaded CPython 3.4m Windows x86-64

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

Uploaded CPython 3.4m Windows x86

aiohttp-0.22.0b6-cp34-cp34m-manylinux1_x86_64.whl (147.4 kB view details)

Uploaded CPython 3.4m

aiohttp-0.22.0b6-cp34-cp34m-manylinux1_i686.whl (144.7 kB view details)

Uploaded CPython 3.4m

File details

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

File metadata

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

File hashes

Hashes for aiohttp-0.22.0b6.tar.gz
Algorithm Hash digest
SHA256 4e61267359195adddaf305a5107cff2366f5335d3d39bf87f36217fed447a536
MD5 a9ac3eeae51a270b27c6c492dc65b923
BLAKE2b-256 82fc6f869a006d80a847c5f84b0308a685262ddf0ba06e5006d9e5daf90eb16d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b6-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 7853b8ca23f184b60385d9c877db02cecd661c0ff59d959db0e162473b6e26f1
MD5 8b906a5e7dc7b27af81ab1089ff605d5
BLAKE2b-256 f068d8e67271ac46f34cebc86d7fa97de3dead1fe94e6ab5701fd30025cf70a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b6-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 5b537367afea48df11606dda432ea4bb09a64e670a43335ac33096d522bc0724
MD5 8902291622a11f9a6bb0ac9f2fcdc243
BLAKE2b-256 0622474c54efb92274ba24175682e8589a2eb2564bd0c9ae7c75e82fbfac2ca5

See more details on using hashes here.

File details

Details for the file aiohttp-0.22.0b6-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for aiohttp-0.22.0b6-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 06b87e49cb2fb40d882aa717a09deb26e6bc2c461409ab856f500c2400592e4b
MD5 bcb2ba1cf0065702ca0a8d3382bd2d65
BLAKE2b-256 cb7111fc66b13c6b32f9db6bd3986f6fe0b46fe263f274bf19a47ed9bfb152c5

See more details on using hashes here.

File details

Details for the file aiohttp-0.22.0b6-cp35-cp35m-manylinux1_i686.whl.

File metadata

File hashes

Hashes for aiohttp-0.22.0b6-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 4167fbf12b0c735e2bf610c2a418404fbfe90b058e75579553659c59f03b6255
MD5 092cf8bfa8a1f4354e17cf9cfb8ae159
BLAKE2b-256 de217d1e9e5d9ea40aae0028e09b6f1c065364b21c602ecd486439e2553a6b17

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b6-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 b944e18e744b447bd721d963df89698a27fbc32d675c576f2d710f251ea67dcb
MD5 6cbce6f887ff82ff3c7f325ababc796d
BLAKE2b-256 b2c3e85a7c854962da6750668313449ccba7e2df2d50fd7ce8075fee4c488585

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b6-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 b6e7b0dce40661ef5bfb50223de97addfa4e8fc209d2196f337690cc3cc24846
MD5 fa3cd867c0ad779c9aed211a638ea599
BLAKE2b-256 52b060c65803e9bf11461bcf1d5b483614a20328bdbac1d9059bc1e0b65259c1

See more details on using hashes here.

File details

Details for the file aiohttp-0.22.0b6-cp34-cp34m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for aiohttp-0.22.0b6-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 70c33d277911feb52716d05276c5f2e6a010f3ae59be3f1f05bd535898fe13d8
MD5 d861744889e95736deebe08465b502b3
BLAKE2b-256 e2cd9cb496ba79a9e0b560db3ef4c3724fbc4ca7cfddf7532ba4817a5a3210ad

See more details on using hashes here.

File details

Details for the file aiohttp-0.22.0b6-cp34-cp34m-manylinux1_i686.whl.

File metadata

File hashes

Hashes for aiohttp-0.22.0b6-cp34-cp34m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 c16cd6a1381992a4d7bdaa6734dafed93eca90988ef610730a82a37199a25fcf
MD5 22a20312f7603507be7b0b595928062f
BLAKE2b-256 a17bd5a6bb93dcd8e25ecfcae58bbac1bbe4528231b16a4d8d2728aede87eacd

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