我在Python中使用了Requests
模块,并发送了一个请求并得到了响应。
鉴于gzip
具有以下信息,响应似乎为r.headers
:
{'Date': 'Tue, 06 Dec 2016 17:35:44 GMT', 'Content-Type': 'application/json', 'Content-Length': '21632', 'Cache-Control': 'public,max-age=3600', 'Content-Encoding': 'gzip', 'Vary': 'Accept-Encoding'}
但是,当Requests
决定其编码并返回解压缩的数据时,当我尝试检出r.text
时,它获得UnicodeEncodeError: 'ascii' codec can't encode character XXX
。
进一步挖掘,我发现响应中存在一个编码错误(r.content
,它将数据返回为bites
)。
Currencies":[{"Code":"JPY","Symbol":"\xc2\xa5","ThousandsSeparator":",...
但是,我不确定如何处理错误的编码错误。即使我将其编码设置为utf-8
(r.encoding =" utf-8"),我仍然得到UnicodeEncodeError
。我觉得gzip
引起了Requests
自动处理的问题,但我怎样才能纠正错误但自动完成的解码?
我向SkyScanner的API发送了一个请求,其中包含以下代码:
headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json",
"charset": "utf-8"
}
r = requests.get(url, headers=headers)
我在这里缺少什么?
答案 0 :(得分:2)
requests.Response
对象具有raw属性,允许您获取原始套接字响应。
所以,你需要这样做:
r = requests.get(url, headers=headers, stream=True)
r.raw.read()
来源:http://www.python-requests.org/en/latest/user/quickstart/#raw-response-content