Вопрос:
Недавно я перешел с запросов на aiohttp, потому что не мог использовать его в асинхронных циклах.
Обмен прошел отлично, и все идет хорошо, за исключением одного. Моя консоль полна
Attempt to decode JSON with unexpected mimetype:
а также
Attempt to decode JSON with unexpected mimetype: txt/html; charset=utf-8
У моего кода есть список сайтов, на которые он идет, и захватывает JSON, Каждый сайт отличается, но мой цикл в основном одинаковый для каждого из них, Ive упростил его здесь:
PoolName = «http://website.com» endpoint = «/api/stats» headers = «headers = {‘content-type’: ‘text/html’}» #Ive tried «application/json» and no headers async with aiohttp.get(url=PoolName+endpoint, headers=headers) as hashrate: hashrate = await hashrate.json() endVariable = hashrate[‘GLRC’][‘HASH’]
Он отлично работает, подключается к сайту, захватывает json и правильно устанавливает endVariable. но по какой-то причине
Attempt to decode JSON with unexpected mimetype:
печатает каждый раз, когда он проходит цикл. Это раздражает, потому что он печатает статистику на консоли, и они теряются в ошибках каждый раз, когда захватывают сайты json
Есть ли способ исправить эту ошибку или скрыть ее?
Лучший ответ:
aiohttp пытается поступить правильно и предупредить вас о неверном Content-Type, который в худшем случае может указывать на то, что вы вообще не получаете данные JSON, а что-то не связанное, например, HTML-содержимое страница с ошибкой.
Однако на практике многие серверы неправильно настроены на то, чтобы всегда отправлять неверный тип MIME в своих ответах JSON, и библиотекам JavaScript, очевидно, все равно. Если вы знаете, что имеете дело с таким сервером, вы всегда можете отключить предупреждение, вызвав json.loads самостоятельно:
import json # … async with self._session.get(uri, …) as resp: data = await resp.read() hashrate = json.loads(data)
Указание Content-Type во время попытки не имеет значения, поскольку оно влияет только на Content-Type вашего запроса, тогда как проблема заключается в Content-Type ответа сервера, который не находится под вашим контролем.
Ответ №1
Передать ожидаемый тип содержимого методу json():
data = await resp.json(content_type=’text/html’)
или полностью отключить проверку:
data = await resp.json(content_type=None)