Python请求模块&;JSON响应

Python请求模块&;JSON响应,python,json,http-request,python-requests,Python,Json,Http Request,Python Requests,我用的是真棒的 为了测试我为我们的一个内部项目创建的API。 我相信我已经发现了请求模块本身的一个缺陷,或者是我使用它时的一个缺陷 因为我们的数据不是超敏感的,所以我们的API使用简单、基本的HTTP身份验证来控制访问。当我请求API URL时,使用JSON作为数据格式,或者使用带有HTTPBasicAuthHandler的urllib2,或者使用PHP和cURL,我会将数据作为格式正确的JSON字符串返回—没问题 但是,当我使用Requests模块发出相同的请求时,我会返回一个编码字符串,并且

我用的是真棒的 为了测试我为我们的一个内部项目创建的API。 我相信我已经发现了请求模块本身的一个缺陷,或者是我使用它时的一个缺陷

因为我们的数据不是超敏感的,所以我们的API使用简单、基本的HTTP身份验证来控制访问。当我请求API URL时,使用JSON作为数据格式,或者使用带有HTTPBasicAuthHandler的urllib2,或者使用PHP和cURL,我会将数据作为格式正确的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) 为什么请求以这种编码返回数据,以及如何解码和/或“修复”数据


提前谢谢

出于好奇,当你
打印r.content
时,你会得到什么?

这很有趣!当我看到这个方法时,我甚至没有看到:dir(r)输出JSON字符串。这就是应该调用的方法,而不是read()?经过进一步思考,我可以看出这可能是对库的滥用(即-应该调用r.content而不是r.read()),但它没有解释为什么我的开发虚拟机之间的输出不同(所有其他因素相同,在调用r.read()时输出JSON字符串)和生产框(输出该编码字符串)。知道输出为何不同吗?@waveslider我对请求一无所知,只知道它在我的列表中,但我猜它与默认编码有关。您的开发框可能是UTF-8(所有JSON都应该是UTF-8)服务器是另一回事。我猜
.content
属性会查看所有编码头等,并应用它们,而
.read()
只是把字节从电线上取下来,因为它的编码不同,所以你得到的是字节。同样,所有这些都只是猜测。你的操作系统确实有默认编码,但我不知道Python是如何与之交互的。我几乎肯定有一种方法可以覆盖它,但我不知道它在我的脑海里。这可能有助于阅读。最好的解决方案可能是使用,因为这是可行的,也是示例代码的工作方式。是的,Python确实从系统中获得默认编码。这取决于Python版本、平台和配置。下面是一个很好的资源,可供深入了解: