1

I am trying to understand aiohttp a little better. Can someone check why my code is not printing the response of the request, instead it just prints the coroutine.

import asyncio
import aiohttp
import requests

async def get_event_1(session):
    url = "https://stackoverflow.com/"
    headers = {
        'content-Type': 'application/json'
    }
    response = await session.request('GET', url)
    return response.json()

async def get_event_2(session):
    url = "https://google.com"
    headers = {
        'content-Type': 'application/json'
    }
    response = await session.request('GET', url)
    return response.json()

async def main():
    async with aiohttp.ClientSession() as session:
        return await asyncio.gather(
            get_event_1(session),
            get_event_2(session)
        )

loop = asyncio.get_event_loop()
x = loop.run_until_complete(main())
loop.close()
print(x)

Output:

$ python async.py 
[<coroutine object ClientResponse.json at 0x10567ae60>, <coroutine object ClientResponse.json at 0x10567aef0>]
sys:1: RuntimeWarning: coroutine 'ClientResponse.json' was never awaited

How do i print the responses instead?

1
  • 2
    You need to await response.json() as well: return await response.json() Commented Aug 14, 2020 at 6:59

1 Answer 1

2

The error message you received is informing you that a coroutine was never awaited.

You can see from the aiohttp documentation that response.json() is a also a coroutine and therefore must be awaited. https://docs.aiohttp.org/en/stable/client_quickstart.html#json-response-content

return await response.json()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.