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.4.post0 (2021-03-06)
Misc
Bumped upper bound of the chardet runtime dependency to allow their v4.0 version stream. #5366
3.7.4 (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.post0-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 02f46fc0e3c5ac58b80d4d56eb0a7c7d97fcef69ace9326289fb9f1955e65cfe |
|
MD5 | d3739bb69fc0a2995793277f49c05768 |
|
BLAKE2b-256 | 3aa8f37091116004c0cc362abed2079e1890a3ab784eb3965a3e41f39ba76c1f |
Hashes for aiohttp-3.7.4.post0-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 932bb1ea39a54e9ea27fc9232163059a0b8855256f4052e776357ad9add6f1c9 |
|
MD5 | a40585f9d8d71d675dd98bd4e6a85235 |
|
BLAKE2b-256 | 1534c784e8ffb442862a96473c2ac468a42257fea6e7f9a99fac9563ee27a9b7 |
Hashes for aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 17c073de315745a1510393a96e680d20af8e67e324f70b42accbd4cb3315c9fb |
|
MD5 | fe92649c85f175add795f6d88fec0804 |
|
BLAKE2b-256 | 34402b3295eb6f66209d1b2ad6ef34ebdf1cb1675c62f8697a8fe7c4f11d2838 |
Hashes for aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a5ca29ee66f8343ed336816c553e82d6cade48a3ad702b9ffa6125d187e2dedb |
|
MD5 | 666b38167c768211eb6e62335288cfbe |
|
BLAKE2b-256 | 6c8f24dd62e54153fe2b0838891629ef70f86bfdd774585f2a05c115cc54d3bf |
Hashes for aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f881853d2643a29e643609da57b96d5f9c9b93f62429dcc1cbb413c7d07f0e1a |
|
MD5 | 7dda3c71d5beeec6e0ec639262df56d0 |
|
BLAKE2b-256 | ff1c5f301a7dd87d667e0b11f6305ff58fcf5910f7a29f23d857c1f9afc56ae4 |
Hashes for aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cffe3ab27871bc3ea47df5d8f7013945712c46a3cc5a95b6bee15887f1675c22 |
|
MD5 | 1b94acf375d341eaf90a3e80948d50c7 |
|
BLAKE2b-256 | ba095412357e129dda648d1ff53a5db292e9a183184855a72eb86f3a516a854a |
Hashes for aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bdb230b4943891321e06fc7def63c7aace16095be7d9cf3b1e01be2f10fba439 |
|
MD5 | 9d8955bf202884699888dd10e74b5e9f |
|
BLAKE2b-256 | 8b9e970be81ea38c4fff3e5a77cad58c38dfc94645712ad9125eca4ff50ddb21 |
Hashes for aiohttp-3.7.4.post0-cp39-cp39-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 15492a6368d985b76a2a5fdd2166cddfea5d24e69eefed4630cbaae5c81d89bd |
|
MD5 | 47754dfd7f78e4595f80392b166cb6c7 |
|
BLAKE2b-256 | c56256354d114074e17a288ba89c3897d6e1965239f0e8def510cb78e04ff6fa |
Hashes for aiohttp-3.7.4.post0-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7b18b97cf8ee5452fa5f4e3af95d01d84d86d32c5e2bfa260cf041749d66360b |
|
MD5 | e0b1944cfc5fc07c9dddf4d74c672a35 |
|
BLAKE2b-256 | 62c549ce62949ab0381300c718cc3934a91c13d23abe72bbb28daffe169660d7 |
Hashes for aiohttp-3.7.4.post0-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 114b281e4d68302a324dd33abb04778e8557d88947875cbf4e842c2c01a030c5 |
|
MD5 | 7279af4fc2e9451de85cf6b6ccd46c57 |
|
BLAKE2b-256 | f4a228a7ec428c3f140ead2f3238814743e5eaf8be3c7dbf42a9551b11357691 |
Hashes for aiohttp-3.7.4.post0-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 515dfef7f869a0feb2afee66b957cc7bbe9ad0cdee45aec7fdc623f4ecd4fb16 |
|
MD5 | 4d4c62bf623f5542fcea77b3cdf09e1a |
|
BLAKE2b-256 | ad3318c2938872e14c39c6bbfb35015284e1fd3337e9c3b9c18d04eb40a7ce2b |
Hashes for aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 79ebfc238612123a713a457d92afb4096e2148be17df6c50fb9bf7a81c2f8013 |
|
MD5 | 27aaa4bdc4bd8ddaf1ff0e6de16d6222 |
|
BLAKE2b-256 | a676f18138b0ff84fcd939667a2efc2e1b49c871299f9091f84c06bb4c350c01 |
Hashes for aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a00bb73540af068ca7390e636c01cbc4f644961896fa9363154ff43fd37af2f5 |
|
MD5 | bddfd6180e15d364f6872e4da776d60c |
|
BLAKE2b-256 | 4ba0e7a51d38a31df52ae50d42c42e717178ac005c7b3a76764ce2752ed1e376 |
Hashes for aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e54962802d4b8b18b6207d4a927032826af39395a3bd9196a5af43fc4e60b009 |
|
MD5 | 0815fb7f6481e7fc3bf6f3fe2c47996d |
|
BLAKE2b-256 | a07bd317bb70c4161389b4c38579e766d52b6d00fb0a45ef479bdd46aeb2fa4f |
Hashes for aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bb437315738aa441251214dad17428cafda9cdc9729499f1d6001748e1d432f4 |
|
MD5 | ee38496f5ddeca508c43c058df3d93ac |
|
BLAKE2b-256 | 11a7037b565866667fcf29b960347f7577f5b131815c7ae986c8cd28c82319ec |
Hashes for aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 64322071e046020e8797117b3658b9c2f80e3267daec409b350b6a7a05041213 |
|
MD5 | 63acef4275aa718b0fc8886cdeeb9ed8 |
|
BLAKE2b-256 | c2093c014ef067296cf0d842ef37e89ea771f3e7a6476180b4189a5aab77614c |
Hashes for aiohttp-3.7.4.post0-cp38-cp38-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | af9aa9ef5ba1fd5b8c948bb11f44891968ab30356d65fd0cc6707d989cd521df |
|
MD5 | 6fdd45aede6a247a4ef00fe4734ee026 |
|
BLAKE2b-256 | 339c355a3b7fd23335726b1e84ac87dbe4b6744b664977b56316329e0048d070 |
Hashes for aiohttp-3.7.4.post0-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 547da6cacac20666422d4882cfcd51298d45f7ccb60a04ec27424d2f36ba3eaf |
|
MD5 | c04844702da745ac101e289cea34eb8c |
|
BLAKE2b-256 | 85368637de18f5b91c84942b36d5d47b74befb8b41af6574520f1ba23fae59c0 |
Hashes for aiohttp-3.7.4.post0-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d9e13b33afd39ddeb377eff2c1c4f00544e191e1d1dee5b6c51ddee8ea6f0cf5 |
|
MD5 | 0b15b912048b6e07d30dcb375b2c9413 |
|
BLAKE2b-256 | 3097acfee80c69002e6c7eec16a95539c467acb0f9cb686a0d8c17b8d9c6fecb |
Hashes for aiohttp-3.7.4.post0-cp37-cp37m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7615dab56bb07bff74bc865307aeb89a8bfd9941d2ef9d817b9436da3a0ea54f |
|
MD5 | 340f3c4fb942f76036069b0887c56880 |
|
BLAKE2b-256 | 50635e9096c7f3d7633b394e1e1a4ccdc8dd0124d1de432499edabbbf56a11c4 |
Hashes for aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 14762875b22d0055f05d12abc7f7d61d5fd4fe4642ce1a249abdf8c700bf1fd8 |
|
MD5 | eb44d42d81a651aa66aad8444b2e3832 |
|
BLAKE2b-256 | 88c05890b4c8b04a79b7360e8fe4490feb0bb3ab179743f199f0e6220cebd568 |
Hashes for aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 209b4a8ee987eccc91e2bd3ac36adee0e53a5970b8ac52c273f7f8fd4872c94c |
|
MD5 | 0428a46da159c0f24d319ba0f6f5e054 |
|
BLAKE2b-256 | c07df38eb9997f24b6133aa6fb7a9e11d1af24b52d685aea653d723367ff2602 |
Hashes for aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 40eced07f07a9e60e825554a31f923e8d3997cfc7fb31dbc1328c70826e04cde |
|
MD5 | af4bd76a62b0127c0b502f2f126f6431 |
|
BLAKE2b-256 | c4d7ada8fe09cde1ef3579031283ff59e673756f5bd4bdd0f1674f263d86b367 |
Hashes for aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d012ad7911653a906425d8473a1465caa9f8dea7fcf07b6d870397b774ea7c0f |
|
MD5 | 05579f494663b6e2a50b4bf0fd5ac2f1 |
|
BLAKE2b-256 | a36671719c7fcd6847fa0aa0b0c2c95928c2e30cd1eec0edc919f41a992ab9dc |
Hashes for aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e4b2b334e68b18ac9817d828ba44d8fcb391f6acb398bcc5062b14b2cbeac970 |
|
MD5 | 7b6a50b595c7473dcc7f904bc9564bc5 |
|
BLAKE2b-256 | b30ea300924d2d3fcd88a26146716506f73a3a1216c6247c4466ad21346ffd61 |
Hashes for aiohttp-3.7.4.post0-cp37-cp37m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2e19413bf84934d651344783c9f5e22dee452e251cfd220ebadbed2d9931dbf0 |
|
MD5 | 30c12664f17260c721417aabfac3dd9d |
|
BLAKE2b-256 | 26aa1b7ca137f7065a7f56ac03f8abfc07382fec3d9f12a38d8a885c5f7d3826 |
Hashes for aiohttp-3.7.4.post0-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 230a8f7e24298dea47659251abc0fd8b3c4e38a664c59d4b89cca7f6c09c9e87 |
|
MD5 | d8a0707e469688c06a0dc0b198d670f0 |
|
BLAKE2b-256 | 5bdf5fddeee4eb5864474c2d4e44e0895a39ef4bd7789782d52848ed5d025461 |
Hashes for aiohttp-3.7.4.post0-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f705e12750171c0ab4ef2a3c76b9a4024a62c4103e3a55dd6f99265b9bc6fcfc |
|
MD5 | 90e5ec909bc4d3b67518fa0fe4a7abcd |
|
BLAKE2b-256 | 858fe4fb9574630ae3fe385549cd29174f57e2a0b6808b9109be9bdf6d5e8533 |
Hashes for aiohttp-3.7.4.post0-cp36-cp36m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3d78619672183be860b96ed96f533046ec97ca067fd46ac1f6a09cd9b7484287 |
|
MD5 | 3ee7860d3772e978e73dd0322d9dcc1b |
|
BLAKE2b-256 | c5244b5c373a225641e84f68c02412b488f47e7f3fdef5498ecf875220953505 |
Hashes for aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0563c1b3826945eecd62186f3f5c7d31abb7391fedc893b7e2b26303b5a9f3fe |
|
MD5 | 240ef313aec83dd7c7e9684893d11e06 |
|
BLAKE2b-256 | 31287b49246d7825c61e1a14306ab050e8eec48fcf5b009b19c8f6ea4e312467 |
Hashes for aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5df68496d19f849921f05f14f31bd6ef53ad4b00245da3195048c69934521809 |
|
MD5 | 0a5335caaeebdd876da77bcf4ca2b8a3 |
|
BLAKE2b-256 | 95be94734e9659c433bcbde3c18b13472262a86b6c567f533a4469bef0327fda |
Hashes for aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c6e9dcb4cb338d91a73f178d866d051efe7c62a7166653a91e7d9fb18274058f |
|
MD5 | df985ab4dcb8710e6ab32c75e4d32053 |
|
BLAKE2b-256 | 2afb6351764c1d81f9f0c993c7a2d25e34b5a4fc9bcff1c77ac99e712e207c4d |
Hashes for aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 393f389841e8f2dfc86f774ad22f00923fdee66d238af89b70ea314c4aefd290 |
|
MD5 | af47354318272fcebc4906d9f2373105 |
|
BLAKE2b-256 | 23765edd678a864ef72c5afd9448c61f564b1a53af470d04e98c66ac4a193a28 |
Hashes for aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fe60131d21b31fd1a14bd43e6bb88256f69dfc3188b3a89d736d6c71ed43ec95 |
|
MD5 | 8a8fea74610f0a88aec908d9c35c30ac |
|
BLAKE2b-256 | e71519b71232cefd5f433d8a1dc4f9a3c560cefd199620bec83ff17dfa5325f1 |
Hashes for aiohttp-3.7.4.post0-cp36-cp36m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4b302b45040890cea949ad092479e01ba25911a15e648429c7c5aae9650c67a8 |
|
MD5 | c90ff2d7859ae1a2424e1a301b41e15b |
|
BLAKE2b-256 | 11e93d036dc23aa3d27a439e5167aa379b86eef54d3ac163e2d2be307b318894 |
Hashes for aiohttp-3.7.4.post0-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3cf75f7cdc2397ed4442594b935a11ed5569961333d49b7539ea741be2cc79d5 |
|
MD5 | 430a88ee22f8f054bc0ef9ac389a0350 |
|
BLAKE2b-256 | 2712972e2da7fd85ace03b37ef35f5a42f53e69ae1ae96d391fd565d047ab2bc |