Python – Intenta decodificar JSON con un mimetype inesperado:

Recientemente cambié las solicitudes a aiohttp porque no podía usarlo en asyncio loops.

El canje fue perfecto y todo va bien, excepto por una cosa. Mi consola esta llena de

Attempt to decode JSON with unexpected mimetype: 

y

 Attempt to decode JSON with unexpected mimetype: txt/html; charset=utf-8 

Mi código tiene una lista de sitios a los que va también y de donde toma JSON. Cada sitio es diferente, pero mi bucle es básicamente el mismo para cada uno de ellos, lo he simplificado aquí:

 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'] 

Funciona perfectamente, se conecta al sitio, toma el json y configura endVariable correctamente. pero por alguna razón

 Attempt to decode JSON with unexpected mimetype: 

Imprime cada vez que pasa por el bucle. Lo que es molesto porque imprime las estadísticas en la consola y se pierden en los errores cada vez que captan un sitio. Json

¿Hay alguna manera de corregir este error o de ocultarlo?

aiohttp está tratando de hacer lo correcto y le advierte de un Content-Type incorrecto, que en el peor de los casos podría indicar que no está obteniendo datos JSON, sino algo no relacionado, como el contenido HTML de una página de error.

Sin embargo, en la práctica, muchos servidores están mal configurados para enviar siempre el tipo MIME incorrecto en sus respuestas JSON, y a las bibliotecas de JavaScript aparentemente no les importa. Si sabe que está tratando con un servidor así, siempre puede silenciar la advertencia invocando json.loads usted mismo:

 import json # ... async with self._session.get(uri, ...) as resp: data = await resp.read() hashrate = json.loads(data) 

Especificar el tipo de Content-Type como lo intentó no hace ninguna diferencia porque solo afecta el Content-Type de Content-Type de su solicitud , mientras que el problema radica en el Content-Type de Content-Type de la respuesta del servidor, que no está bajo su control.

Pase el tipo de contenido esperado al método json() :

 data = await resp.json(content_type='text/html') 

o deshabilite el cheque por completo:

 data = await resp.json(content_type=None)