Skip to main content

http client/server for asyncio

aiohttp logo https://secure.travis-ci.org/KeepSafe/aiohttp.png

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.

Requirements

License

aiohttp is offered under the Apache 2 license.

Documentation

http://aiohttp.readthedocs.org/

Source code

The latest developer version is available in a github repository: https://github.com/KeepSafe/aiohttp

Getting started

Client

To retrieve something from the web:

import aiohttp
import asyncio

def get_body(url):
    response = yield from aiohttp.request('GET', url)
    return (yield from response.read())

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    raw_html = loop.run_until_complete(get_body('http://python.org'))
    print(raw_html)

You can use the get command like this anywhere in your asyncio powered program:

response = yield from aiohttp.request('GET', 'http://python.org')
body = yield from response.read()
print(body)

If you want to use timeouts for aiohttp client side please use standard asyncio approach:

yield from asyncio.wait_for(request('GET', url), 10)

Server

In aiohttp 0.12 we’ve added highlevel API for web HTTP server.

This is simple usage example:

import asyncio
from aiohttp import web


@asyncio.coroutine
def handle(request):
    name = request.match_info.get('name', "Anonymous")
    text = "Hello, " + name
    return web.Response(body=text.encode('utf-8'))


@asyncio.coroutine
def wshandler(request):
    ws = web.WebSocketResponse()
    ws.start(request)

    while True:
        msg = yield from ws.receive()

        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


@asyncio.coroutine
def init(loop):
    app = web.Application(loop=loop)
    app.router.add_route('GET', '/echo', wshandler)
    app.router.add_route('GET', '/{name}', handle)

    srv = yield from loop.create_server(app.make_handler(), '127.0.0.1', 8080)
    print("Server started at http://127.0.0.1:8080")
    return srv

loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
loop.run_forever()

CHANGES

0.16.3 (05-30-2015)

  • Fix StaticRoute vulnerability to directory traversal attacks #380

0.16.2 (05-27-2015)

  • Update python version required for __del__ usage: it’s actially

    3.4.1 instead of 3.4.0

  • Add check for presence of loop.is_closed() method before call the former #378

0.16.1 (05-27-2015)

  • Fix regression in static file handling #377

0.16.0 (05-26-2015)

  • Unset waiter future after cancellation #363

  • Update request url with query parameters #372

  • Support new fingerprint param of TCPConnector to enable verifying ssl certificates via md5, sha1, or sha256 digest #366

  • Setup uploaded filename if field value is binary and transfer encoding is not specified #349

  • Implement ClientSession.close() method

  • Implement connector.closed readonly property

  • Implement ClientSession.closed readonly property

  • Implement ClientSession.connector readonly property

  • Implement ClientSession.detach method

  • Add __del__ to client-side objects: sessions, connectors, connections, requests, responses.

  • Refactor connections cleanup by connector #357

  • Add limit parameter to connector constructor #358

  • Add request.has_body property #364

  • Add response_class parameter to ws_connect() #367

  • ProxyConnector doesn’t support keep-alive requests by default starting from now #368

  • Add connector.force_close property

  • Add ws_connect to ClientSession #374

  • Support optional chunk_size parameter in router.add_static()

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.16.3.tar.gz (1.4 MB view details)

Uploaded Source

File details

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

File metadata

  • Download URL: aiohttp-0.16.3.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for aiohttp-0.16.3.tar.gz
Algorithm Hash digest
SHA256 eaf479acc98ffee0a029882465ebf21f3c302e1b94a41b16c8a5a695bc614900
MD5 4215059cbf33dd42c0b99e06b1229029
BLAKE2b-256 69f0dc5959f1b2f641c40357e66a516214ef7d2d13a5ce3cdb044d78f7c57f39

See more details on using hashes here.

Release history Release notifications | RSS feed

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page