Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

http client/server for asyncio

Project Description
http client/server for asyncio
==============================

.. image:: https://raw.github.com/KeepSafe/aiohttp/master/docs/_static/aiohttp-icon-128x128.png
:height: 64px
:width: 64px
:alt: aiohttp logo

.. image:: https://secure.travis-ci.org/KeepSafe/aiohttp.png
:target: https://secure.travis-ci.org/KeepSafe/aiohttp
:align: right

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
------------

- Python >= 3.3
- asyncio https://pypi.python.org/pypi/asyncio


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:

.. code-block:: python

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:

.. code-block:: python

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:

.. code-block:: python

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:

.. code-block:: python

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.4 (06-13-2015)
-------------------

- Don't clear current exception in multidict's `__repr__` (cythonized
versions) #410

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()`
Release History

Release History

History Node

2.3.9

History Node

2.3.8

History Node

2.3.7

History Node

2.3.6

History Node

2.3.5

History Node

2.3.4

History Node

2.3.3

History Node

2.3.2

History Node

2.3.2b3

History Node

2.3.2b2

History Node

2.3.1

History Node

2.3.1a1

History Node

2.3.0

History Node

2.3.0a4

History Node

2.3.0a3

History Node

2.3.0a2

History Node

2.3.0a1

History Node

2.2.5

History Node

2.2.4

History Node

2.2.3

History Node

2.2.2

History Node

2.2.1

History Node

2.2.0

History Node

2.1.0

History Node

2.0.7

History Node

2.0.6

History Node

2.0.5

History Node

2.0.4

History Node

2.0.3

History Node

2.0.2

History Node

2.0.1

History Node

2.0.0

History Node

2.0.0rc1

History Node

1.3.5

History Node

1.3.4

History Node

1.3.3

History Node

1.3.2

History Node

1.3.1

History Node

1.3.0

History Node

1.2.0

History Node

1.1.6

History Node

1.1.5

History Node

1.1.4

History Node

1.1.3

History Node

1.1.2

History Node

1.1.1

History Node

1.1.0

History Node

1.0.5

History Node

1.0.3

History Node

1.0.2

History Node

1.0.1

History Node

1.0.0

History Node

0.22.5

History Node

0.22.4

History Node

0.22.3

History Node

0.22.2

History Node

0.22.1

History Node

0.22.0

History Node

0.22.0b6

History Node

0.22.0b5

History Node

0.22.0b4

History Node

0.22.0b3

History Node

0.22.0b2

History Node

0.22.0b1

History Node

0.22.0b0

History Node

0.22.0a0

History Node

0.21.6

History Node

0.21.5

History Node

0.21.4

History Node

0.21.2

History Node

0.21.1

History Node

0.21.0

History Node

0.20.2

History Node

0.20.1

History Node

0.20.0

History Node

0.19.0

History Node

0.18.4

History Node

0.18.3

History Node

0.18.2

History Node

0.18.1

History Node

0.18.0

History Node

0.17.4

History Node

0.17.3

History Node

0.17.2

History Node

0.17.1

History Node

0.17.0

History Node

0.16.6

History Node

0.16.5

This version
History Node

0.16.4

History Node

0.16.3

History Node

0.16.2

History Node

0.16.1

History Node

0.16.0

History Node

0.15.3

History Node

0.15.2

History Node

0.15.1

History Node

0.15.0

History Node

0.14.4

History Node

0.14.3

History Node

0.14.2

History Node

0.14.1

History Node

0.14.0

History Node

0.13.1

History Node

0.13.0

History Node

0.12.0

History Node

0.11.0

History Node

0.10.2

History Node

0.10.1

History Node

0.10.0

History Node

0.9.3

History Node

0.9.2

History Node

0.9.1

History Node

0.9.0

History Node

0.8.4

History Node

0.8.3

History Node

0.8.2

History Node

0.8.1

History Node

0.8.0

History Node

0.7.3

History Node

0.7.2

History Node

0.7.1

History Node

0.7.0

History Node

0.6.5

History Node

0.6.4

History Node

0.6.3

History Node

0.6.2

History Node

0.6.1

History Node

0.6.0

History Node

0.5.0

History Node

0.4.4

History Node

0.4.3

History Node

0.4.2

History Node

0.4.1

History Node

0.4

History Node

0.3

History Node

0.2

History Node

0.1

Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
aiohttp-0.16.4.tar.gz (1.6 MB) Copy SHA256 Checksum SHA256 Source Jun 13, 2015

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting