Skip to main content

http client/server for asyncio

Project description

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

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

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 = WebSocketResponse()
    ok, protocol = resp.can_start(request)
    if not ok:
        return web.HTTPBadRequest()
    else:
        ws.start(request)

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

        if msg.tp == web.MsgType.text:
           ws.send_str(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', wshandle)
    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.15.1 (03-31-2015)

  • Pass Autobahn Testsuit tests

  • Fixed websocket fragmentation

  • Fixed websocket close procedure

  • Fixed parser buffer limits

  • Added timeout parameter to WebSocketResponse ctor

  • Added WebSocketResponse.close_code attribute

0.15.0 (03-27-2015)

  • Client WebSockets support

  • New Multipart system #273

  • Support for “Except” header #287 #267

  • Set default Content-Type for post requests #184

  • Fix issue with construction dynamic route with regexps and trailing slash #266

  • Add repr to web.Request

  • Add repr to web.Response

  • Add repr for NotFound and NotAllowed match infos

  • Add repr for web.Application

  • Add repr to UrlMappingMatchInfo #217

  • Gunicorn 19.2.x compatibility

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.15.1.tar.gz (448.9 kB view details)

Uploaded Source

File details

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

File metadata

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

File hashes

Hashes for aiohttp-0.15.1.tar.gz
Algorithm Hash digest
SHA256 07006a2ebc7d472ce58b54445f300b22b89bf0dc448e4fd90a5e3b4a63f1c349
MD5 d8034fcee1e9f286e811b77055688474
BLAKE2b-256 02ad3a4c8e5c2de9ec8a70cabd5ad1a227166e497a676dca41e92b51ef1e77fc

See more details on using hashes here.

Supported by

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