Asyncioループで使用できないため、最近リクエストからaiohttpに切り替えました。
スワップは完全に行われ、1つを除いてすべてがうまくいきました。私のコンソールはいっぱいです
Attempt to decode JSON with unexpected mimetype:
そして
Attempt to decode JSON with unexpected mimetype: txt/html; charset=utf-8
私のコードには、それが行くサイトのリストがあり、JSONを取得しています。各サイトは異なりますが、ループは基本的に各サイトで同じです。ここで簡略化しました。
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コンテンツなど。
ただし、実際には、多くのサーバーがJSON応答でalways誤ったMIMEタイプを送信するように誤って設定されており、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
のサーバーの応答。これはユーザーの制御下にありません。
予想されるコンテンツタイプをjson()
メソッドに渡します。
data = await resp.json(content_type='text/html')
またはチェックを完全に無効にします:
data = await resp.json(content_type=None)