簡體   English   中英

使用 Python 和 Aiohttp 鏈接請求

[英]Chaining Requests using Python and Aiohttp

我是 python 異步編程的新手,一直在使用 aiohttp 編寫腳本,該腳本從 get 請求中獲取數據並將響應中的特定變量傳遞到另一個 post 請求。 我嘗試過的示例如下:

async def fetch1(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as resp:      # First hit to the url 
            data = resp.json()                    # Grab response
            return await fetch2(data['uuid'])     # Pass uuid to the second function for post request

async def fetch2(id):
    url2 = "http://httpbin.org/post"
    params = {'id': id}
    async with aiohttp.ClientSession() as session:
        async with session.post(url2,data=params) as resp:
            return await resp.json()


async def main():
    url = 'http://httpbin.org/uuid'
    data = await fetch1(url)


loop = asyncio.get_event_loop()
loop.run_until_complete(main())

當我執行腳本時,我收到以下錯誤:

Traceback (most recent call last):
  File ".\benchmark.py", line 27, in <module>
   loop.run_until_complete(main())
  File "C:\ProgramFiles\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.2288.0_x64__qbz5n2kfra8p0\lib\asyncio\base_events.py", line 616, in run_until_complete
  return future.result()
  File ".\benchmark.py", line 22, in main
   data = await fetch1(url)
  File ".\benchmark.py", line 10, in fetch1
   return fetch2(data['uuid'])
TypeError: 'coroutine' object is not subscriptable
sys:1: RuntimeWarning: coroutine 'ClientResponse.json' was never awaited

我知道協程是一個生成器,但是我該怎么做 go ,任何幫助將不勝感激。

該錯誤表示coroutine 'ClientResponse.json' was never awaited這意味着它必須在 json 部分之前await 這是因為您使用的是異步 function。

async def fetch1(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as resp:      # First hit to the url 
            data = await resp.json()                    # Grab response
            return await fetch2(data['uuid'])     # Pass uuid to the second function for post request

async def fetch2(id):
    url2 = "http://httpbin.org/post"
    params = {'id': id}
    async with aiohttp.ClientSession() as session:
        async with session.post(url2,data=params) as resp:
            return await resp.json()


async def main():
    url = 'http://httpbin.org/uuid'
    data = await fetch1(url)


loop = asyncio.get_event_loop()
loop.run_until_complete(main())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM