我有一个带有aiohttp的python服务器设置,它接受文件POST到特定端点。我只想接受一个json正文或gzip' d json文件。我的代码如下:
<iframe src="https://en.wikipedia.org/wiki/Porsche_911" frameborder="0" onload="monitor ">
当我通过上传不是json或gzip&#39; d json的内容来测试时,正确地命中了RequestPayloadError异常,内部日志记录正在按预期完成,并且客户端正在返回预期的响应。但是,我也看到了以下未处理的异常:
class Uploader(View):
async def post(self):
if not self.request.can_read_body:
return json_response({'message': 'Cannot read body'}, status=400)
elif self.request.content_type != 'application/json' and self.request.content_type != 'multipart/form-data':
return json_response({'message': 'Incorrect data type sent to the server'}, status=400)
try:
json_body = await self.request.json()
# Other bits of code using the json body
except RequestPayloadError as e:
# Internal logging here
return json_response({'message': 'Unable to read payload'}, status=400)
# Other code for handling ValidationError, JSONDecodeError, Exception
return json_response({'message': 'File successfully uploaded'}, status=201)
我应该如何处理这个当前未处理的例外,因为它似乎不是源于我的代码,而且我已经处理了我期待的那个?我可以以某种方式抑制aiohttp例外吗?
编辑:我使用的是aiohttp 3.1.1版答案 0 :(得分:0)
Can not decode content-encoding: gzip
点问题来源。
您的对等体使用Content-Encoding: gzip
HTTP标头发送数据,但实际上数据未经过gzip压缩(使用其他压缩器或根本没有压缩器)。
结果 aiohttp 在使用RequestPayloadError
异常解压缩此类数据时失败。