【发布时间】:2022-08-15 19:55:06
【问题描述】:
我正在使用 aiohttp 进行异步 http 请求,当请求返回 4XX 错误时,我无法弄清楚如何从服务器获取响应。
async def login(self, username: str, password: str) -> None:
...
async with aiohttp.ClientSession(headers=self._headers) as session:
async with session.post(route, data=data, headers=self._headers) as resp:
if resp.ok:
response = await resp.json()
self._headers[\'Authorization\'] = \'Bearer \' + response[\'access_token\']
else:
response = await resp.json()
raise InvalidGrant(response)
如果响应返回 2XX 代码,则使用 resp.json() 可以正常工作,但是当它返回 4XX 错误(在本例中为 400)时,它会引发 aiohttp.client_exceptions.ClientConnectionError 并且不会让我得到服务器的响应已发送(我需要,因为服务器返回某种比Bad Request 更具描述性的错误消息)。如果请求不成功,是否无法通过 aiohttp 获得响应?
-
你真的抓住了错误来处理它吗?有关于那件事的信息。
-
@MisterMiyagi 捕捉错误不会帮助我从服务器获得响应,因为它发生在我尝试
resp.json()时,我不确定我还能用什么来获得响应 -
据我了解文档,
ClientConnectionError表示联系错误,即网络层的问题,而不是顶部的 HTTP 层。在这种情况下,不会有 HTTP 错误代码或服务器响应。您的情况究竟是什么时候引发的错误? -
@MisterMiyagi 当
resp.ok不正确时,它专门发生在response = await resp.json()行上。删除该行时,不会引发异常。 -
您是否有任何理由专门寻找
resp.json()而不仅仅是resp.text()?后者也失败了吗?