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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.5m Windows x86-64

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

Uploaded CPython 3.5m Windows x86

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

Uploaded CPython 3.4m Windows x86-64

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

Uploaded CPython 3.4m Windows x86

File details

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

File metadata

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

File hashes

Hashes for aiohttp-0.22.0b1.tar.gz
Algorithm Hash digest
SHA256 2eaebcc3bec5a49746b48244983006be2d9348bfb5c9d18c5178b3c79647b2d6
MD5 47a778dcfad79fc8471498e3ffa1f137
BLAKE2b-256 a21d5fad66b00db9ee1f0dd452d7eaac7294d2d2c34ee002a806b3dfac9b96fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b1-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 dc8756806086381aacf6a1630acecfe5bc8168b32ac0d8f8617c0746a3a47a42
MD5 f6f9d60483fef7a5288ef4c838da7f8a
BLAKE2b-256 85529ac83a7f9e03c513a13bb6a7a2ac58e10506f9ee4ebcf1aa1e2e621928bd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b1-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 bbd8621475147beedc1062d7ebf004d3c59723c793dfef9bdbc7cef9692784b0
MD5 b57b279680dd6df6fb0d52ff6ed877be
BLAKE2b-256 6005b419c7c4888250f6e8bfb459a07a2318806f29053ff4d1670d02e5b8048a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b1-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 af79f3b28aee02064328ce8d204c2d0ff651090f6b94131e93c5ed22fe5023ec
MD5 2bb2c565a8764b8c65e7accc9e3196f0
BLAKE2b-256 ab35274d3466bada71aa8bd6c34985b0db6ac141da720d5c89ab78fcf1bdec47

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.22.0b1-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 944a3f8afebdbf71149313edc5e3b67500c2108525dbb3ffbf1907c8857a5664
MD5 43c6a2bb82a0fb3a7e15d51a7162eded
BLAKE2b-256 a441ab4b94a28413b6651a503bf5e5e390b0cffd014942c7f668c3086253a8d5

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