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

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

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

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.17.0 (08-04-2015)

  • Make StaticRoute support Last-Modified and If-Modified-Since headers #386

  • Add Request.if_modified_since and Stream.Response.last_modified properties

  • Fix deflate compression when writing a chunked response #395

  • Request`s content-length header is cleared now after redirect from POST method #391

  • Return a 400 if server received a non HTTP content #405

  • Fix keep-alive support for aiohttp clients #406

  • Allow gzip compression in high-level server response interface #403

  • Rename TCPConnector.resolve and family to dns_cache #415

  • Make UrlDispatcher ignore quoted characters during url matching #414 Backward-compatibility warning: this may change the url matched by your queries if they send quoted character (like %2F for /) #414

  • Use optional cchardet accelerator if present #418

  • Borrow loop from Connector in ClientSession if loop is not set

  • Add context manager support to ClientSession for session closing.

  • Add toplevel get(), post(), put(), head(), delete(), options(), patch() coroutines.

  • Fix IPv6 support for client API #425

  • Pass SSL context through proxy connector #421

  • Make the rule: path for add_route should start with slash

  • Don’t process request finishing by low-level server on closed event loop

  • Don’t override data if multiple files are uploaded with same key #433

  • Ensure multipart.BodyPartReader.read_chunk read all the necessary data to avoid false assertions about malformed multipart payload

  • Dont sent body for 204, 205 and 304 http exceptions #442

  • Correctly skip Cython compilation in MSVC not found #453

  • Add response factory to StaticRoute #456

  • Don’t append trailing CRLF for multipart.BodyPartReader #454

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

Uploaded Source

File details

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

File metadata

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

File hashes

Hashes for aiohttp-0.17.0.tar.gz
Algorithm Hash digest
SHA256 f70fe81635aa4be1aa955a18e84b1bf596fa961deb2431d0202f7d2c539f887b
MD5 aed95f6ce0ea60af044a38370c4e42e3
BLAKE2b-256 42e91ae6df5a6e653f8a7fa5831707853ccb091afc06a8f34fa4c68e6e86aae6

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