Python – попытка декодирования JSON с неожиданным типом mimetype:

Вопрос: Недавно я перешел с запросов на aiohttp, потому что не мог использовать его в асинхронных циклах. Обмен прошел отлично, и все идет хорошо, за исключением одного. Моя консоль полна Attempt to decode JSON with unexpected mimetype: а также Attempt to decode JSON with unexpected mimetype: txt/html; charset=utf-8 У моего кода есть список сайтов, на

Вопрос:

Недавно я перешел с запросов на 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)

Оцените статью
Добавить комментарий