不同内容类型的 AIOHTTP AWIT 行为不一致

aiohttp inconsistent await behavior for different content types

提问人:S. B. 提问时间:10/31/2023 更新时间:10/31/2023 访问量:8

问:

我正在尝试编写一个服务器,该服务器可以为我传递一个长请求,获取该请求的响应,然后将响应返回给我。

我遇到的是,响应正文在响应正文的等待中似乎以不同的方式处理,具体取决于它是文本还是文件。

例:

async def retransmit_GET(self,path):
  async with aiohttp.ClientSession() as session:
    async with session.get(path) as resp:
      headers = ParseMultiDict(resp.headers) #convert MultiDictProxy to a simple dictionary

      if headers['Content-Type'] not 'application/json':
        #THIS DOESN'T WORK
        #await resp.content.read()
        #return resp
        #THIS DOES WORK
        file_content = await resp.content.read()
        return web.Response(body=file_content, status=resp.status, headers=headers)
      else:
        await resp.text()
        return resp

async def receive_GET(self, request):
  try:
    result = await self.retransmit_GET(self,request.rel_url.path)
    headers = ParseMultiDict(result.headers)
    if headers['Content-Type'] not 'application/json':
      #### THIS IS THE LINE THAT WILL THROW THE EXCEPTION
      return web.Response(body=result.content.read(), status=result.status, headers=headers)
    else:
      return web.Response(text=await result.text(), status=result.status, headers=headers)
  except Exception as e:
    print('EXCEPTION:", e)

为什么我可以在 text() 的情况下等待正文,然后正确传递正文,但是当我在不创建新对象的情况下对内容执行相同的操作时,它只是在尝试读取此函数之外的 resp.content 时返回“EXCEPTION: Connection closed”?

AIOhttp的

评论


答: 暂无答案