Recientemente cambié de solicitudes a aiohttp porque no podía usarlo en bucles asincrónicos.
El intercambio fue perfecto y todo va bien excepto por una cosa. Mi consola está llena de
Attempt to decode JSON with unexpected mimetype:y
Attempt to decode JSON with unexpected mimetype: txt/html; charset=utf-8Mi código tiene una lista de sitios a los que va también y 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 establece endVariable correctamente. pero por alguna razón
Attempt to decode JSON with unexpected mimetype:se imprime cada vez que pasa por el bucle. Lo cual es molesto porque imprime estadísticas en la consola y se pierden en los errores cada vez que toma un sitio json
¿Hay alguna forma de corregir este error o de ocultarlo?
Pase el tipo de contenido esperado al método json() :
data = await resp.json(content_type='text/html')o deshabilite la verificación por completo:
data = await resp.json(content_type=None)aiohttp está tratando de hacer lo correcto y advertirle sobre un Content-Type incorrecto, lo que en el peor de los casos podría indicar que no está obteniendo datos JSON en absoluto, 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 aparentemente a las bibliotecas de JavaScript no les importa. Si sabe que está tratando con un servidor de este tipo, 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 Content-Type como lo intentó no hace ninguna diferencia porque solo afecta el Content-Type de su solicitud , mientras que el problema radica en el Content-Type de la respuesta del servidor, que no está bajo su control.