私は素晴らしい Requests モジュールを使用して、社内プロジェクトの 1 つのために作成した API をテストしています。Requests モジュール自体の欠陥か、それを使用する際の欠陥のいずれかを発見したと思います。
私たちのデータは機密性が高いわけではないため、API はシンプルで基本的な HTTP 認証を使用してアクセスを制御します。JSON をデータ形式として使用し、HTTPBasicAuthHandler または PHP と cURL を使用して urllib2 を使用して API URL の要求を行うと、適切にフォーマットされた JSON 文字列としてデータが返されます。問題ありません。
しかし、Requests モジュールを使用して同じ要求を行うと、エンコードされた文字列が返され、それがどのタイプのエンコードであるかを判断できません。その文字列の先頭のスニペットを次に示します。
\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xadZ\xfb\x8f\xd3H\x12\xfeWzG\xab;\x90
この問題を再現するためにリクエストで使用している数行のコードを次に示します。
import requests
# api_user and api_pw not printed here for security reasons
r = requests.get('http://ourdomain.com/api/featured/school/json', auth=(api_user, api_pw))
status = r.status_code # Produces 200 every time
rawdata = r.read()
print rawdata
そして、それを行うたびに、そのエンコードされた文字列を取得します。
誰でも次のことを判断するのを手伝ってもらえますか:a)それがどのエンコーディングであるか(私自身の教育のため)、およびb)リクエストがそのエンコーディングでデータを返す理由、およびそれをデコードおよび/または「修正」する方法。
前もって感謝します!