here is my code:
import asyncio from aiohttp import ClientSession async def main(): url = "https://stackoverflow.com/" async with ClientSession() as session: async with session.get(url) as resp: print(resp.status) asyncio.run(main())
if I run it on my computer, everything works, but if I run it on pythonanywhere, I get this error:
Traceback (most recent call last): File "/home/0dminnimda/.local/lib/python3.8/site-packages/aiohttp/connector.py", line 936, in _wrap_create_connection return await self._loop.create_connection(*args, **kwargs) # type: ignore # noqa File "/usr/lib/python3.8/asyncio/base_events.py", line 1017, in create_connection raise exceptions[0] File "/usr/lib/python3.8/asyncio/base_events.py", line 1002, in create_connection sock = await self._connect_sock( File "/usr/lib/python3.8/asyncio/base_events.py", line 916, in _connect_sock await self.sock_connect(sock, address) File "/usr/lib/python3.8/asyncio/selector_events.py", line 485, in sock_connect return await fut File "/usr/lib/python3.8/asyncio/selector_events.py", line 517, in _sock_connect_cb raise OSError(err, f'Connect call failed {address}') ConnectionRefusedError: [Errno 111] Connect call failed ('151.101.193.69', 443) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "test_c.py", line 39, in <module> asyncio.run(main()) File "/usr/lib/python3.8/asyncio/runners.py", line 43, in run return loop.run_until_complete(main) File "/usr/lib/python3.8/asyncio/base_events.py", line 608, in run_until_complete return future.result() File "test_c.py", line 28, in main async with session.get(url, timeout=30) as resp: # , headers=headers File "/home/0dminnimda/.local/lib/python3.8/site-packages/aiohttp/client.py", line 1012, in __aenter__ self._resp = await self._coro File "/home/0dminnimda/.local/lib/python3.8/site-packages/aiohttp/client.py", line 480, in _request conn = await self._connector.connect( File "/home/0dminnimda/.local/lib/python3.8/site-packages/aiohttp/connector.py", line 523, in connect proto = await self._create_connection(req, traces, timeout) File "/home/0dminnimda/.local/lib/python3.8/site-packages/aiohttp/connector.py", line 858, in _create_connection _, proto = await self._create_direct_connection( File "/home/0dminnimda/.local/lib/python3.8/site-packages/aiohttp/connector.py", line 1004, in _create_direct_connection raise last_exc File "/home/0dminnimda/.local/lib/python3.8/site-packages/aiohttp/connector.py", line 980, in _create_direct_connection transp, proto = await self._wrap_create_connection( File "/home/0dminnimda/.local/lib/python3.8/site-packages/aiohttp/connector.py", line 943, in _wrap_create_connection raise client_error(req.connection_key, exc) from exc aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host stackoverflow.com:443 ssl:default [Connect call failed ('151.101.193.69', 443)] Unclosed client session client_session: <aiohttp.client.ClientSession object at 0x7f25a71d1a90>
aiohttp on hosting:
Name: aiohttp Version: 3.6.2 Summary: Async http client/server framework (asyncio) Home-page: https://github.com/aio-libs/aiohttp Author: Nikolay Kim Author-email: fafhrd91@gmail.com License: Apache 2 Location: /home/0dminnimda/.local/lib/python3.8/site-packages Requires: chardet, async-timeout, multidict, yarl, attrs Required-by:
aiohttp on my PC:
Name: aiohttp Version: 3.6.2 Summary: Async http client/server framework (asyncio) Home-page: https://github.com/aio-libs/aiohttp Author: Nikolay Kim Author-email: fafhrd91@gmail.com License: Apache 2 Location: c:usersasusappdataroamingpythonpython38site-packages Requires: async-timeout, attrs, chardet, yarl, multidict Required-by:
I am at a loss that it is not so? I am running both files using python3.8.
I also tried other urls, they have the same problem
Do I need to add any more details?
Advertisement
Answer
first solution
Referring to the help from the forum, I added trust_env = True
when creating the client and now everything works.
Explanation: Free accounts on PythonAnywhere must use a proxy to connect to the public internet, but aiohttp, by default, does not connect to a proxy accessible from an environment variable.
Link to aiohttp documentation (look for a parameter called “trust_env”)
Here is the new code:
import asyncio from aiohttp import ClientSession async def main(): url = "https://stackoverflow.com/" async with ClientSession(trust_env=True) as session: async with session.get(url) as resp: print(resp.status) asyncio.run(main())
solution if the first didn’t help you
The domain you are trying to access must be in whitelist, otherwise you may also get this error.
In this case you need to post a new topic on the pythonanywhere forum asking to add the domain to the whitelist.
If this is an api, then you will need to provide a link to the documentation for this api.