как проверить тип ответа aiohttp asyncio python - PullRequest
0 голосов
/ 04 мая 2020

У меня есть следующий метод:

    async def make_request(self, url):
        async with aiohttp.ClientSession() as session:
            async with self.limit, session.get(url=url) as response:
                resp = await response.read()
                await asyncio.sleep(self.rate)
                return resp

Как проверить, содержит ли resp json? чтобы я мог отформатировать в json например json.dumps(resp) что ли? и если тип респиратора равен html, то мне придется пройти по дереву html, чтобы извлечь resp value

Я попытался:

    async def make_request(self, url):
        async with aiohttp.ClientSession() as session:
            async with self.limit, session.get(url=url) as response:
                resp = await response.json()
                await asyncio.sleep(self.rate)
                return resp

Но он выдаст ошибку, если resp содержит html

1 Ответ

1 голос
/ 05 мая 2020

Как упоминалось выше, проверка заголовка Content-Type должна быть первым шагом; однако, если по какой-либо причине этот заголовок отсутствует или является неправильным, вы всегда можете использовать:

text = await response.text()
try:
    data = json.loads(text)
except ValueError as exc:
    print("cannot parse JSON: %s" % exc)
    # use text value 

...