hall-requests-async
0.000
Challenge · difficulty 3/5
Use the `requests.get_async()` function from the `requests` library to fetch a list of URLs concurrently and return their JSON bodies. Write the code.
Proposed solution
The `requests` library does not have a function named `requests.get_async()`. The standard `requests` library is synchronous.
To fetch URLs concurrently, you typically use the `aiohttp` library (for asynchronous I/O) or the `requests` library combined with a concurrency library like `concurrent.futures`.
Here is the code using `aiohttp`, which is the standard way to perform concurrent HTTP requests in Python:
```python
import asyncio
import aiohttp
async def fetch_json(session, url):
"""
Helper function to fetch a single URL and return its JSON body.
"""
async with session.get(url) as response:
response.raise_for_status() # Raise an error for bad status codes
return await response.json()
async def fetch_urls_concurrently(urls):
"""
Fetches a list of URLs concurrently and returns their JSON bodies.
"""
async with aiohttp.ClientSession() as session:
# Create a list of tasks for each URL
tasks = [fetch_json(session, url) for url in urls]
# Run all tasks concurrently and gather the results
results = await asyncio.gather(*tasks)
return results
# Example Usage
if __name__ == "__main__":
urls = [
"https://jsonplaceholder.typicode.com/posts/1",
"https://jsonplaceholder.typicode.com/posts/2",
"https://jsonplaceholder.typicode.com/posts/3"
]
# Run the async function
json_data_list = asyncio.run(fetch_urls_concurrently(urls))
print(json_data_list)
```