Skip to main content
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://travis-ci.org/KeepSafe/aiohttp.svg?branch=master
:target: https://travis-ci.org/KeepSafe/aiohttp
:align: right

.. image:: https://coveralls.io/repos/KeepSafe/aiohttp/badge.svg?branch=master&service=github
:target: https://coveralls.io/github/KeepSafe/aiohttp?branch=master
:align: right

.. image:: https://badge.fury.io/py/aiohttp.svg
:target: https://badge.fury.io/py/aiohttp

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:

.. code-block:: python

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:

.. code-block:: python

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

http://aiohttp.readthedocs.org/

Discussion list
---------------

*aio-libs* google group: https://groups.google.com/forum/#!forum/aio-libs

Requirements
------------

- Python >= 3.4.1
- chardet https://pypi.python.org/pypi/chardet

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.21.5 (04-22-2016)
-------------------

- Fix command line arg parsing #797

0.21.4 (03-12-2016)
-------------------

- Fix ResourceAdapter: dont add method to allowed if resource is not
match #826

- Fix Resouce: append found method to returned allowed methods

0.21.2 (02-16-2016)
-------------------

- Fix a regression: support for handling ~/path in static file routes was
broken #782

0.21.1 (02-10-2016)
-------------------

- Make new resources classes public #767

- Add `router.resources()` view

- Fix cmd-line parameter names in doc

0.21.0 (02-04-2016)
--------------------

- Introduce on_shutdown signal #722

- Implement raw input headers #726

- Implement web.run_app utility function #734

- Introduce on_cleanup signal

- Deprecate Application.finish() / Application.register_on_finish() in favor of
on_cleanup.

- Get rid of bare aiohttp.request(), aiohttp.get() and family in docs #729

- Deprecate bare aiohttp.request(), aiohttp.get() and family #729

- Refactor keep-alive support #737:

- Enable keepalive for HTTP 1.0 by default

- Disable it for HTTP 0.9 (who cares about 0.9, BTW?)

- For keepalived connections

- Send `Connection: keep-alive` for HTTP 1.0 only

- don't send `Connection` header for HTTP 1.1

- For non-keepalived connections

- Send `Connection: close` for HTTP 1.1 only

- don't send `Connection` header for HTTP 1.0

- Add version parameter to ClientSession constructor,
deprecate it for session.request() and family #736

- Enable access log by default #735

- Deprecate app.router.register_route() (the method was not documented
intentionally BTW).

- Deprecate app.router.named_routes() in favor of app.router.named_resources()

- route.add_static accepts pathlib.Path now #743

- Add command line support: `$ python -m aiohttp.web package.main` #740

- FAQ section was added to docs. Enjoy and fill free to contribute new topics

- Add async context manager support to ClientSession

- Document ClientResponse's host, method, url properties

- Use CORK/NODELAY in client API #748

- ClientSession.close and Connector.close are coroutines now

- Close client connection on exception in ClientResponse.release()

- Allow to read multipart parts without content-length specified #750

- Add support for unix domain sockets to gunicorn worker #470

- Add test for default Expect handler #601

- Add the first demo project

- Rename `loader` keyword argument in `web.Request.json` method. #646

- Add local socket binding for TCPConnector #678

Release history Release notifications

History Node

3.1.3

History Node

3.1.2

History Node

3.1.1

History Node

3.1.0

History Node

3.0.9

History Node

3.0.8

History Node

3.0.7

History Node

3.0.6

History Node

3.0.5

History Node

3.0.4

History Node

3.0.3

History Node

3.0.2

History Node

3.0.1

History Node

3.0.0

History Node

3.0.0b4

History Node

3.0.0b3

History Node

3.0.0b2

History Node

3.0.0b1

History Node

3.0.0b0

History Node

2.3.10

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

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

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 the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
aiohttp-0.21.5-cp34-cp34m-win32.whl (235.3 kB) Copy SHA256 hash SHA256 Wheel cp34 Mar 22, 2016
aiohttp-0.21.5-cp34-cp34m-win_amd64.whl (241.3 kB) Copy SHA256 hash SHA256 Wheel cp34 Mar 22, 2016
aiohttp-0.21.5-cp35-cp35m-win32.whl (235.4 kB) Copy SHA256 hash SHA256 Wheel cp35 Mar 22, 2016
aiohttp-0.21.5-cp35-cp35m-win_amd64.whl (243.8 kB) Copy SHA256 hash SHA256 Wheel cp35 Mar 22, 2016
aiohttp-0.21.5.tar.gz (529.0 kB) Copy SHA256 hash SHA256 Source None Mar 22, 2016

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page