Async http client/server framework (asyncio)
Project description
Async http client/server framework
Key Features
Supports both client and server side of HTTP protocol.
Supports both client and server Web-Sockets out-of-the-box and avoids Callback Hell.
Provides Web-server with middlewares and plugable routing.
Getting started
Client
To get something from the web:
import aiohttp
import asyncio
async def main():
async with aiohttp.ClientSession() as session:
async with session.get('http://python.org') as response:
print("Status:", response.status)
print("Content-type:", response.headers['content-type'])
html = await response.text()
print("Body:", html[:15], "...")
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
This prints:
Status: 200
Content-type: text/html; charset=utf-8
Body: <!doctype html> ...
Coming from requests ? Read why we need so many lines.
Server
An example using a simple server:
# examples/server_simple.py
from aiohttp import web
async def handle(request):
name = request.match_info.get('name', "Anonymous")
text = "Hello, " + name
return web.Response(text=text)
async def wshandle(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
async for msg in ws:
if msg.type == web.WSMsgType.text:
await ws.send_str("Hello, {}".format(msg.data))
elif msg.type == web.WSMsgType.binary:
await ws.send_bytes(msg.data)
elif msg.type == web.WSMsgType.close:
break
return ws
app = web.Application()
app.add_routes([web.get('/', handle),
web.get('/echo', wshandle),
web.get('/{name}', handle)])
if __name__ == '__main__':
web.run_app(app)
Documentation
Demos
External links
Feel free to make a Pull Request for adding your link to these pages!
Communication channels
aio-libs discourse group: https://aio-libs.discourse.group
gitter chat https://gitter.im/aio-libs/Lobby
We support Stack Overflow. Please add aiohttp tag to your question there.
Requirements
Python >= 3.6
Optionally you may install the cChardet and aiodns libraries (highly recommended for sake of speed).
License
aiohttp is offered under the Apache 2 license.
Keepsafe
The aiohttp community would like to thank Keepsafe (https://www.getkeepsafe.com) for its support in the early days of the project.
Source code
The latest developer version is available in a GitHub repository: https://github.com/aio-libs/aiohttp
Benchmarks
If you are interested in efficiency, the AsyncIO community maintains a list of benchmarks on the official wiki: https://github.com/python/asyncio/wiki/Benchmarks
Changelog
3.7.3 (2021-02-25)
Bugfixes
(SECURITY BUG) Started preventing open redirects in the aiohttp.web.normalize_path_middleware middleware. For more details, see https://github.com/aio-libs/aiohttp/security/advisories/GHSA-v6wp-4m6f-gcjg.
Thanks to Beast Glatisant for finding the first instance of this issue and Jelmer Vernooij for reporting and tracking it down in aiohttp. #5497
Fix interpretation difference of the pure-Python and the Cython-based HTTP parsers construct a yarl.URL object for HTTP request-target.
Before this fix, the Python parser would turn the URI’s absolute-path for //some-path into / while the Cython code preserved it as //some-path. Now, both do the latter. #5498
3.7.3 (2020-11-18)
Features
Bugfixes
Raise a ClientResponseError instead of an AssertionError for a blank HTTP Reason Phrase. #3532
Fix web_middlewares.normalize_path_middleware behavior for patch without slash. #3669
Fix overshadowing of overlapped sub-applications prefixes. #3701
Make BaseConnector.close() a coroutine and wait until the client closes all connections. Drop deprecated “with Connector():” syntax. #3736
Reset the sock_read timeout each time data is received for a aiohttp.client response. #3808
Fixed type annotation for add_view method of UrlDispatcher to accept any subclass of View #3880
Fixed querying the address families from DNS that the current host supports. #5156
Change return type of MultipartReader.__aiter__() and BodyPartReader.__aiter__() to AsyncIterator. #5163
Provide x86 Windows wheels. #5230
Improved Documentation
Misc
3.7.2 (2020-10-27)
Bugfixes
Fixed static files handling for loops without .sendfile() support #5149
3.7.1 (2020-10-25)
Bugfixes
Fixed a type error caused by the conditional import of Protocol. #5111
Server doesn’t send Content-Length for 1xx or 204 #4901
Fix run_app typing #4957
Always require typing_extensions library. #5107
Fix a variable-shadowing bug causing ThreadedResolver.resolve to return the resolved IP as the hostname in each record, which prevented validation of HTTPS connections. #5110
Added annotations to all public attributes. #5115
Fix flaky test_when_timeout_smaller_second #5116
Ensure sending a zero byte file does not throw an exception #5124
Fix a bug in web.run_app() about Python version checking on Windows #5127
3.7.0 (2020-10-24)
Features
Response headers are now prepared prior to running on_response_prepare hooks, directly before headers are sent to the client. #1958
Add a quote_cookie option to CookieJar, a way to skip quotation wrapping of cookies containing special characters. #2571
Call AccessLogger.log with the current exception available from sys.exc_info(). #3557
web.UrlDispatcher.add_routes and web.Application.add_routes return a list of registered AbstractRoute instances. AbstractRouteDef.register (and all subclasses) return a list of registered resources registered resource. #3866
Added properties of default ClientSession params to ClientSession class so it is available for introspection #3882
Don’t cancel web handler on peer disconnection, raise OSError on reading/writing instead. #4080
Implement BaseRequest.get_extra_info() to access a protocol transports’ extra info. #4189
Added ClientSession.timeout property. #4191
allow use of SameSite in cookies. #4224
Use loop.sendfile() instead of custom implementation if available. #4269
Apply SO_REUSEADDR to test server’s socket. #4393
Use .raw_host instead of slower .host in client API #4402
Allow configuring the buffer size of input stream by passing read_bufsize argument. #4453
Pass tests on Python 3.8 for Windows. #4513
Add method and url attributes to TraceRequestChunkSentParams and TraceResponseChunkReceivedParams. #4674
Add ClientResponse.ok property for checking status code under 400. #4711
Don’t ceil timeouts that are smaller than 5 seconds. #4850
TCPSite now listens by default on all interfaces instead of just IPv4 when None is passed in as the host. #4894
Bump http_parser to 2.9.4 #5070
Bugfixes
Fix keepalive connections not being closed in time #3296
Fix failed websocket handshake leaving connection hanging. #3380
Fix tasks cancellation order on exit. The run_app task needs to be cancelled first for cleanup hooks to run with all tasks intact. #3805
Don’t start heartbeat until _writer is set #4062
Fix handling of multipart file uploads without a content type. #4089
Preserve view handler function attributes across middlewares #4174
Fix the string representation of ServerDisconnectedError. #4175
Raising RuntimeError when trying to get encoding from not read body #4214
Remove warning messages from noop. #4282
Raise ClientPayloadError if FormData re-processed. #4345
Fix a warning about unfinished task in web_protocol.py #4408
Fixed ‘deflate’ compression. According to RFC 2616 now. #4506
Fixed OverflowError on platforms with 32-bit time_t #4515
Fixed request.body_exists returns wrong value for methods without body. #4528
Fix connecting to link-local IPv6 addresses. #4554
Fix a problem with connection waiters that are never awaited. #4562
Always make sure transport is not closing before reuse a connection.
Reuse a protocol based on keepalive in headers is unreliable. For example, uWSGI will not support keepalive even it serves a HTTP 1.1 request, except explicitly configure uWSGI with a --http-keepalive option.
Servers designed like uWSGI could cause aiohttp intermittently raise a ConnectionResetException when the protocol poll runs out and some protocol is reused. #4587
Handle the last CRLF correctly even if it is received via separate TCP segment. #4630
Fix the register_resource function to validate route name before splitting it so that route name can include python keywords. #4691
Improve typing annotations for web.Request, aiohttp.ClientResponse and multipart module. #4736
Fix resolver task is not awaited when connector is cancelled #4795
Fix a bug “Aiohttp doesn’t return any error on invalid request methods” #4798
Fix HEAD requests for static content. #4809
Fix incorrect size calculation for memoryview #4890
Add HTTPMove to _all__. #4897
Fixed the type annotations in the tracing module. #4912
Fix typing for multipart __aiter__. #4931
Fix for race condition on connections in BaseConnector that leads to exceeding the connection limit. #4936
Add forced UTF-8 encoding for application/rdap+json responses. #4938
Fix inconsistency between Python and C http request parsers in parsing pct-encoded URL. #4972
Fix connection closing issue in HEAD request. #5012
Fix type hint on BaseRunner.addresses (from List[str] to List[Any]) #5086
Make web.run_app() more responsive to Ctrl+C on Windows for Python < 3.8. It slightly increases CPU load as a side effect. #5098
Improved Documentation
Fix example code in client quick-start #3376
Updated the docs so there is no contradiction in ttl_dns_cache default value #3512
Add ‘Deploy with SSL’ to docs. #4201
Change typing of the secure argument on StreamResponse.set_cookie from Optional[str] to Optional[bool] #4204
Changes ttl_dns_cache type from int to Optional[int]. #4270
Simplify README hello word example and add a documentation page for people coming from requests. #4272
Improve some code examples in the documentation involving websockets and starting a simple HTTP site with an AppRunner. #4285
Fix typo in code example in Multipart docs #4312
Fix code example in Multipart section. #4314
Update contributing guide so new contributors read the most recent version of that guide. Update command used to create test coverage reporting. #4810
Spelling: Change “canonize” to “canonicalize”. #4986
Add aiohttp-sse-client library to third party usage list. #5084
Misc
3.6.3 (2020-10-12)
Bugfixes
Pin yarl to <1.6.0 to avoid buggy behavior that will be fixed by the next aiohttp release.
3.6.2 (2019-10-09)
Features
Bugfixes
Reset the sock_read timeout each time data is received for a aiohttp.ClientResponse. #3808
Fix handling of expired cookies so they are not stored in CookieJar. #4063
Fix misleading message in the string representation of ClientConnectorError; self.ssl == None means default SSL context, not SSL disabled #4097
Don’t clobber HTTP status when using FileResponse. #4106
Improved Documentation
Misc
3.6.1 (2019-09-19)
Features
Compatibility with Python 3.8. #4056
Bugfixes
Improved Documentation
Provide pytest-aiohttp namespace for pytest fixtures in docs. #3723
3.6.0 (2019-09-06)
Features
Add support for Named Pipes (Site and Connector) under Windows. This feature requires Proactor event loop to work. #3629
Removed Transfer-Encoding: chunked header from websocket responses to be compatible with more http proxy servers. #3798
Accept non-GET request for starting websocket handshake on server side. #3980
Bugfixes
Raise a ClientResponseError instead of an AssertionError for a blank HTTP Reason Phrase. #3532
Fix an issue where cookies would sometimes not be set during a redirect. #3576
Change normalize_path_middleware to use 308 redirect instead of 301.
This behavior should prevent clients from being unable to use PUT/POST methods on endpoints that are redirected because of a trailing slash. #3579
Drop the processed task from all_tasks() list early. It prevents logging about a task with unhandled exception when the server is used in conjunction with asyncio.run(). #3587
Signal type annotation changed from Signal[Callable[['TraceConfig'], Awaitable[None]]] to Signal[Callable[ClientSession, SimpleNamespace, ...]. #3595
Use sanitized URL as Location header in redirects #3614
Improve typing annotations for multipart.py along with changes required by mypy in files that references multipart.py. #3621
Close session created inside aiohttp.request when unhandled exception occurs #3628
Cleanup per-chunk data in generic data read. Memory leak fixed. #3631
Use correct type for add_view and family #3633
Fix _keepalive field in __slots__ of RequestHandler. #3644
Properly handle ConnectionResetError, to silence the “Cannot write to closing transport” exception when clients disconnect uncleanly. #3648
Suppress pytest warnings due to test_utils classes #3660
Fix overshadowing of overlapped sub-application prefixes. #3701
Fixed return type annotation for WSMessage.json() #3720
Properly expose TooManyRedirects publicly as documented. #3818
Fix missing brackets for IPv6 in proxy CONNECT request #3841
Make the signature of aiohttp.test_utils.TestClient.request match asyncio.ClientSession.request according to the docs #3852
Use correct style for re-exported imports, makes mypy --strict mode happy. #3868
Fixed type annotation for add_view method of UrlDispatcher to accept any subclass of View #3880
Made cython HTTP parser set Reason-Phrase of the response to an empty string if it is missing. #3906
Add URL to the string representation of ClientResponseError. #3959
Accept istr keys in LooseHeaders type hints. #3976
Fixed race conditions in _resolve_host caching and throttling when tracing is enabled. #4013
For URLs like “unix://localhost/…” set Host HTTP header to “localhost” instead of “localhost:None”. #4039
Improved Documentation
Modify documentation for Background Tasks to remove deprecated usage of event loop. #3526
use if __name__ == '__main__': in server examples. #3775
Update documentation reference to the default access logger. #3783
Improve documentation for web.BaseRequest.path and web.BaseRequest.raw_path. #3791
Removed deprecation warning in tracing example docs #3964
3.5.4 (2019-01-12)
Bugfixes
Fix stream .read() / .readany() / .iter_any() which used to return a partial content only in case of compressed content #3525
3.5.3 (2019-01-10)
Bugfixes
Fix type stubs for aiohttp.web.run_app(access_log=True) and fix edge case of access_log=True and the event loop being in debug mode. #3504
Fix aiohttp.ClientTimeout type annotations to accept None for fields #3511
Send custom per-request cookies even if session jar is empty #3515
Restore Linux binary wheels publishing on PyPI
3.5.2 (2019-01-08)
Features
Bugfixes
Preserve MultipartWriter parts headers on write. Refactor the way how Payload.headers are handled. Payload instances now always have headers and Content-Type defined. Fix Payload Content-Disposition header reset after initial creation. #3035
Log suppressed exceptions in GunicornWebWorker. #3464
Remove wildcard imports. #3468
Use the same task for app initialization and web server handling in gunicorn workers. It allows to use Python3.7 context vars smoothly. #3471
Fix handling of chunked+gzipped response when first chunk does not give uncompressed data #3477
Replace collections.MutableMapping with collections.abc.MutableMapping to avoid a deprecation warning. #3480
Payload.size type annotation changed from Optional[float] to Optional[int]. #3484
Ignore done tasks when cancels pending activities on web.run_app finalization. #3497
Improved Documentation
Add documentation for aiohttp.web.HTTPException. #3490
Misc
3.5.1 (2018-12-24)
Fix a regression about ClientSession._requote_redirect_url modification in debug mode.
3.5.0 (2018-12-22)
Features
The library type annotations are checked in strict mode now.
Add support for setting cookies for individual request (#2387)
Application.add_domain implementation (#2809)
The default app in the request returned by test_utils.make_mocked_request can now have objects assigned to it and retrieved using the [] operator. (#3174)
Make request.url accessible when transport is closed. (#3177)
Add zlib_executor_size argument to Response constructor to allow compression to run in a background executor to avoid blocking the main thread and potentially triggering health check failures. (#3205)
Enable users to set ClientTimeout in aiohttp.request (#3213)
Don’t raise a warning if NETRC environment variable is not set and ~/.netrc file doesn’t exist. (#3267)
Add default logging handler to web.run_app If the Application.debug` flag is set and the default logger aiohttp.access is used, access logs will now be output using a stderr StreamHandler if no handlers are attached. Furthermore, if the default logger has no log level set, the log level will be set to DEBUG. (#3324)
Add method argument to session.ws_connect(). Sometimes server API requires a different HTTP method for WebSocket connection establishment. For example, Docker exec needs POST. (#3378)
Create a task per request handling. (#3406)
Bugfixes
Enable passing access_log_class via handler_args (#3158)
Return empty bytes with end-of-chunk marker in empty stream reader. (#3186)
Accept CIMultiDictProxy instances for headers argument in web.Response constructor. (#3207)
Don’t uppercase HTTP method in parser (#3233)
Make method match regexp RFC-7230 compliant (#3235)
Add app.pre_frozen state to properly handle startup signals in sub-applications. (#3237)
Enhanced parsing and validation of helpers.BasicAuth.decode. (#3239)
Change imports from collections module in preparation for 3.8. (#3258)
Ensure Host header is added first to ClientRequest to better replicate browser (#3265)
Fix forward compatibility with Python 3.8: importing ABCs directly from the collections module will not be supported anymore. (#3273)
Keep the query string by normalize_path_middleware. (#3278)
Fix missing parameter raise_for_status for aiohttp.request() (#3290)
Bracket IPv6 addresses in the HOST header (#3304)
Fix default message for server ping and pong frames. (#3308)
Fix tests/test_connector.py typo and tests/autobahn/server.py duplicate loop def. (#3337)
Fix false-negative indicator end_of_HTTP_chunk in StreamReader.readchunk function (#3361)
Release HTTP response before raising status exception (#3364)
Fix task cancellation when sendfile() syscall is used by static file handling. (#3383)
Fix stack trace for asyncio.TimeoutError which was not logged, when it is caught in the handler. (#3414)
Improved Documentation
Deprecations and Removals
Deprecate modification of session.requote_redirect_url (#2278)
Deprecate stream.unread_data() (#3260)
Deprecated use of boolean in resp.enable_compression() (#3318)
Encourage creation of aiohttp public objects inside a coroutine (#3331)
Drop dead Connection.detach() and Connection.writer. Both methods were broken for more than 2 years. (#3358)
Deprecate app.loop, request.loop, client.loop and connector.loop properties. (#3374)
Deprecate explicit debug argument. Use asyncio debug mode instead. (#3381)
Deprecate body parameter in HTTPException (and derived classes) constructor. (#3385)
Deprecate bare connector close, use async with connector: and await connector.close() instead. (#3417)
Deprecate obsolete read_timeout and conn_timeout in ClientSession constructor. (#3438)
Misc
#3341, #3351
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
Built Distributions
Hashes for aiohttp-3.7.4-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 40bd1b101b71a18a528ffce812cc14ff77d4a2a1272dfb8b11b200967489ef3e |
|
MD5 | 8045b62be2c34b99bb48afeb8657d975 |
|
BLAKE2b-256 | fea8017c33d002a1b8112e718e16e9d1a31eb9b6c67ac8e06d701d19189a8109 |
Hashes for aiohttp-3.7.4-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fbd3b5e18d34683decc00d9a360179ac1e7a320a5fee10ab8053ffd6deab76e0 |
|
MD5 | f1fb56e4b454b5c654a76981bf9c4997 |
|
BLAKE2b-256 | 55f7184114dd7f2982699394c7e4fb8f4a0b67f4e11401fc8d104ad98a87375d |
Hashes for aiohttp-3.7.4-cp39-cp39-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cc31e906be1cc121ee201adbdf844522ea3349600dd0a40366611ca18cd40e81 |
|
MD5 | 75857793aaecbce8531fa91ecb55d41d |
|
BLAKE2b-256 | 85ca2dab75b6961e3bdfa4c0a6ad50a5f439f4ff351a0295f584300b9cec95ca |
Hashes for aiohttp-3.7.4-cp39-cp39-manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c44d3c82a933c6cbc21039326767e778eface44fca55c65719921c4b9661a3f7 |
|
MD5 | ca13d63edea9308209864399e85cdd9e |
|
BLAKE2b-256 | 7bf311d782235c3c3bea83f43cd6aefca307799bb77bd6038f27d54a34967b2f |
Hashes for aiohttp-3.7.4-cp39-cp39-manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5b50e0b9460100fe05d7472264d1975f21ac007b35dcd6fd50279b72925a27f4 |
|
MD5 | 17ac0dbe61bb43f3a67d91ce401af057 |
|
BLAKE2b-256 | 5496167bb952d7baeefc6d2c5fef4bbd1f4e643b919481636d7b8bee1db58f90 |
Hashes for aiohttp-3.7.4-cp39-cp39-manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7c7820099e8b3171e54e7eedc33e9450afe7cd08172632d32128bd527f8cb77d |
|
MD5 | 514103960efd6815108bea7d4c44bb40 |
|
BLAKE2b-256 | 0d15bb0d1be24b50bc37cc5ca8b06ee11e3d0e39505258a41295c56582223454 |
Hashes for aiohttp-3.7.4-cp39-cp39-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 58c62152c4c8731a3152e7e650b29ace18304d086cb5552d317a54ff2749d32a |
|
MD5 | c8c3a224c8cd7bc13b26c6ab0918e8c9 |
|
BLAKE2b-256 | 1c5aa25ed130426369824c2360b1ec0e59dd2b97efb7fba2c6a39a1f2e396d98 |
Hashes for aiohttp-3.7.4-cp39-cp39-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 822bd4fd21abaa7b28d65fc9871ecabaddc42767884a626317ef5b75c20e8a2d |
|
MD5 | 7e348ede3dccb4cbbfdddfd22a0a1347 |
|
BLAKE2b-256 | 8929b67977e3181f1b0cf4dd5fb57ade7bbe7917d2248bab456440932d0a83a0 |
Hashes for aiohttp-3.7.4-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2eb3efe243e0f4ecbb654b08444ae6ffab37ac0ef8f69d3a2ffb958905379daf |
|
MD5 | 6e3e24a056f82f325a1aec34684bae3d |
|
BLAKE2b-256 | a735f13621cdf78797f2dfa34e3c92d93e4838bd6d355f0521512d24c3f32f9f |
Hashes for aiohttp-3.7.4-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 950b7ef08b2afdab2488ee2edaff92a03ca500a48f1e1aaa5900e73d6cf992bc |
|
MD5 | ae0123831b5a5de0b36cf4e5dfc52b94 |
|
BLAKE2b-256 | 879dc4889810df32becc60d30bb6d78714349db54b33ecf94564291e26c171d3 |
Hashes for aiohttp-3.7.4-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e76e78863a4eaec3aee5722d85d04dcbd9844bc6cd3bfa6aa880ff46ad16bfcb |
|
MD5 | b24df3b8ebfbed9d947d607015221ef1 |
|
BLAKE2b-256 | 258283fdc9c9e6cc58af0dbef5f27b6258805c9f66e427feee3b76e0f8cd0124 |
Hashes for aiohttp-3.7.4-cp38-cp38-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 418597633b5cd9639e514b1d748f358832c08cd5d9ef0870026535bd5eaefdd0 |
|
MD5 | 871eab8c11d0280a4497ae8727dc4118 |
|
BLAKE2b-256 | 3e3d74f069b633289dd015eaacb71eeb9705990e13f1dd1d76175fce5ad6cd94 |
Hashes for aiohttp-3.7.4-cp38-cp38-manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5dde6d24bacac480be03f4f864e9a67faac5032e28841b00533cd168ab39cad9 |
|
MD5 | 9782f749a3f1f906c24337c8005d9d09 |
|
BLAKE2b-256 | fd67aa2984d471aa29f9a2d27cf67c7eb6ce69346c2de7fa4cfc32b1a85cc787 |
Hashes for aiohttp-3.7.4-cp38-cp38-manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 99c5a5bf7135607959441b7d720d96c8e5c46a1f96e9d6d4c9498be8d5f24212 |
|
MD5 | fc12c419fd132f574f83b65a470e9053 |
|
BLAKE2b-256 | dd4b28052bb4ec921347a04fa95ec468b82869d7d77a187d71d2cd92f64cd6cd |
Hashes for aiohttp-3.7.4-cp38-cp38-manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dee68ec462ff10c1d836c0ea2642116aba6151c6880b688e56b4c0246770f297 |
|
MD5 | 6e6fad325838cbbce4a90bf1bb193e66 |
|
BLAKE2b-256 | 286c4ab30a9e50d8047ca27845dc01f21c9f5dd8a01f23b06f37db1cb329c3c6 |
Hashes for aiohttp-3.7.4-cp38-cp38-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7dbd087ff2f4046b9b37ba28ed73f15fd0bc9f4fdc8ef6781913da7f808d9536 |
|
MD5 | 038396f59bf6db8a92c2538aa7aea6f4 |
|
BLAKE2b-256 | dc4ae999c0a36a6318b2b1ea30bc3434c29f0b6c96f7880957f9a99004fc8bb5 |
Hashes for aiohttp-3.7.4-cp38-cp38-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 71680321a8a7176a58dfbc230789790639db78dad61a6e120b39f314f43f1907 |
|
MD5 | fe8d53bfb9ebe065d5fa1e4b92ac3ef7 |
|
BLAKE2b-256 | be9e45bc01c4c08a4c3d40445f34e8f22306483f927ab8e96f1eafa5ba30178c |
Hashes for aiohttp-3.7.4-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4c1bdbfdd231a20eee3e56bd0ac1cd88c4ff41b64ab679ed65b75c9c74b6c5c2 |
|
MD5 | 978e39e879817765020a73c5d662b9a9 |
|
BLAKE2b-256 | e747c51482f55465e7e6ee1d9eb8e43324a33246347ea5059ccb8879f01e9ee2 |
Hashes for aiohttp-3.7.4-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5e91e927003d1ed9283dee9abcb989334fc8e72cf89ebe94dc3e07e3ff0b11e9 |
|
MD5 | a30011864c2b7d84a67bf5705065bcde |
|
BLAKE2b-256 | 168c41882c0671b842c9d157c5876348b3e9733910f3cbd20315723ab0498529 |
Hashes for aiohttp-3.7.4-cp37-cp37m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2ffea7904e70350da429568113ae422c88d2234ae776519549513c8f217f58a9 |
|
MD5 | 2d1300908380bac40e5b253fc6b4bca2 |
|
BLAKE2b-256 | fe719777412a73829786139a35d9db9580e6ca094bd28401ccc4b441993e792f |
Hashes for aiohttp-3.7.4-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f4496d8d04da2e98cc9133e238ccebf6a13ef39a93da2e87146c8c8ac9768242 |
|
MD5 | 26fda76cd40d71200f6d269511e2c9cd |
|
BLAKE2b-256 | 5ba6d36302eba284f4f427dc288f6b3ecd7f89d739cfca206b80311d3158f6d9 |
Hashes for aiohttp-3.7.4-cp37-cp37m-manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 62bc216eafac3204877241569209d9ba6226185aa6d561c19159f2e1cbb6abfb |
|
MD5 | 85afbf85fa270b72da2a8f1320aa2370 |
|
BLAKE2b-256 | 3cf9c36741a23e52bd3fab88aba7c7c611a47c8eb0dbd6afd4f7e8a732f3af8f |
Hashes for aiohttp-3.7.4-cp37-cp37m-manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5563ad7fde451b1986d42b9bb9140e2599ecf4f8e42241f6da0d3d624b776f40 |
|
MD5 | 585e5888a37ea00cb9407df7b8931191 |
|
BLAKE2b-256 | 484fb731d7c3410961936b074d2593cb7a276d37bbb686fada2dcfad14fb7698 |
Hashes for aiohttp-3.7.4-cp37-cp37m-manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ca56bdfaf825f4439e9e3673775e1032d8b6ea63b8953d3812c71bd6a8b81de |
|
MD5 | 0657804fac41c07bc1b04795cf46f0eb |
|
BLAKE2b-256 | 6876839ecdc91bb5ba9992b787430dbdfc8c43325436549a948217b7763cf4ec |
Hashes for aiohttp-3.7.4-cp37-cp37m-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 119feb2bd551e58d83d1b38bfa4cb921af8ddedec9fad7183132db334c3133e0 |
|
MD5 | 68882f97befa5c0a374d42a19c3297c3 |
|
BLAKE2b-256 | 624a9754351d7d77ef3be31451886c073d962d1522e0e8ef103e404751be1bcf |
Hashes for aiohttp-3.7.4-cp37-cp37m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | feb24ff1226beeb056e247cf2e24bba5232519efb5645121c4aea5b6ad74c1f2 |
|
MD5 | d0c41c90e2bbf96572f2e33aa24c6422 |
|
BLAKE2b-256 | 38605dc8dc9838477d5f562f1a085214c14caae2e0ca72dfda794e90ca70f0e3 |
Hashes for aiohttp-3.7.4-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | eab51036cac2da8a50d7ff0ea30be47750547c9aa1aa2cf1a1b710a1827e7dbe |
|
MD5 | b61113264c49bc0b74a317f4ddfd4ef6 |
|
BLAKE2b-256 | 66031635f2395076c15ae2c0826fbd21c70498d2f10ba650726fae900b6e990f |
Hashes for aiohttp-3.7.4-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 16d0683ef8a6d803207f02b899c928223eb219111bd52420ef3d7a8aa76227b6 |
|
MD5 | 1b5423014b3f9a378484cc911ef4b4c1 |
|
BLAKE2b-256 | 55d327786138a092b0c2efe6a3751e564878a60ef333b3438a5bcce4c56a0596 |
Hashes for aiohttp-3.7.4-cp36-cp36m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 481d4b96969fbfdcc3ff35eea5305d8565a8300410d3d269ccac69e7256b1329 |
|
MD5 | a0ce96b84e513d42608902532cae56ab |
|
BLAKE2b-256 | abdf68417d35d167a8044eb99ea43f3e2c9b7db41b4ed3e9b51f35d2834c0cdc |
Hashes for aiohttp-3.7.4-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c2a80fd9a8d7e41b4e38ea9fe149deed0d6aaede255c497e66b8213274d6d61b |
|
MD5 | 76e9902470d54788ba6e8b2d95167f14 |
|
BLAKE2b-256 | e5258fa8b4060e83b4300ebdd99d74039a59522d6f8895611cdef9e007bfbd46 |
Hashes for aiohttp-3.7.4-cp36-cp36m-manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d5d102e945ecca93bcd9801a7bb2fa703e37ad188a2f81b1e65e4abe4b51b00c |
|
MD5 | 1fb2da09f83a4b4afb025ef87ac12e17 |
|
BLAKE2b-256 | 8af1f616c2c064db0a613407ae967c3d7565ceef8bef31f1faa70b23fc29c424 |
Hashes for aiohttp-3.7.4-cp36-cp36m-manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b84ad94868e1e6a5e30d30ec419956042815dfaea1b1df1cef623e4564c374d9 |
|
MD5 | 26b61965d645c096dcc17bf94ac89e85 |
|
BLAKE2b-256 | 9cc0f56fa196af4edc77ed9675ea4d81ea4c9123ce629b4d1647d614679852d6 |
Hashes for aiohttp-3.7.4-cp36-cp36m-manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8ec1a38074f68d66ccb467ed9a673a726bb397142c273f90d4ba954666e87d54 |
|
MD5 | f3bcec7c35e1a7497f2eadaee4b53679 |
|
BLAKE2b-256 | 36fce3886d9f28cac8ce1e66c733fdcadc5f4e297bb1b48aaa030516ba8e9954 |
Hashes for aiohttp-3.7.4-cp36-cp36m-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bc3d14bf71a3fb94e5acf5bbf67331ab335467129af6416a437bd6024e4f743d |
|
MD5 | 4e790bc2bf4a95fd0afe1f93c5bebe7f |
|
BLAKE2b-256 | 97edc5e4b0768e7097f949637e54fa978f53302488493c1751c81e913e55e2c4 |
Hashes for aiohttp-3.7.4-cp36-cp36m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dd7936f2a6daa861143e376b3a1fb56e9b802f4980923594edd9ca5670974895 |
|
MD5 | 4c47e0e656ef64bd4c854f9a46338195 |
|
BLAKE2b-256 | 5fa0fc385b17d75e36008b0a88d4bca88074ee835e192da9a98fcdc007f2eea1 |
Hashes for aiohttp-3.7.4-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6c8200abc9dc5f27203986100579fc19ccad7a832c07d2bc151ce4ff17190076 |
|
MD5 | 1f6cff377d74fbde87496198966900b7 |
|
BLAKE2b-256 | 6ca5d1bc300d491ab1f58fbf0291586fc501a81c10518d6c4eadd119a1724f70 |