未知的响应编码:由urequest.urlopen()收集

时间:2014-11-16 14:49:51

标签: python http encoding urllib

我正在编写一个Web解析器,它登录到服务器(没有任何错误)。该请求收到以下回复:

\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\xabVJ\xceOIU\xb2\xaaV*K\xcc)\x052\x94\xcc\x95t\x94\xe2\xf3\x12sA\xec\x10\x7foW?\xa5Z\x1d\xa5\x94\xc4\x92D\x90\xa2\x82\xc4"\xa0LIjQ\xb1\x92U^iN\x8e\x8eRI~vj\x1eP\xa9\xae\x99\xb1\xa1\xa1\xa9\xb9\x85\x91\xa5\x89\x99\xb9\x81\x99\xb9\x99\x89\xa5)\xd0\xa4\xd2\xa2\x1c\x88J\xa0!\xb9\xa9\xc5\xc5\x89\xe9\xa90\x9dP.\xd4\xa4Z\x00\x94\x8a\xf6\xe1\x8a\x00\x00\x00

我尝试过大多数在线解码工具,但似乎没有任何效果。

以下是响应标头,如果有帮助的话。

Server: nginx/1.6.0
Date: Sun, 16 Nov 2014 15:07:47 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 128
Connection: close
Cache-Control: no-cache
Expires: 0
Pragma: No-cache
Content-Encoding: gzip

可能是Transfer-Encoding:chunked意味着什么。

任何想法如何解码?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

响应采用JSON格式,并使用gzip压缩。所以要提取数据,试试这个:

>>> import json, gzip
>>> s = b"""\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\xabVJ\xceOIU\xb2\xaaV*K\xcc)\x052\x94\xcc\x95t\x94\xe2\xf3\x12sA\xec\x10\x7foW?\xa5Z\x1d\xa5\x94\xc4\x92D\x90\xa2\x82\xc4"\xa0LIjQ\xb1\x92U^iN\x8e\x8eRI~vj\x1eP\xa9\xae\x99\xb1\xa1\xa1\xa9\xb9\x85\x91\xa5\x89\x99\xb9\x81\x99\xb9\x99\x89\xa5)\xd0\xa4\xd2\xa2\x1c\x88J\xa0!\xb9\xa9\xc5\xc5\x89\xe9\xa90\x9dP.\xd4\xa4Z\x00\x94\x8a\xf6\xe1\x8a\x00\x00\x00"""
>>> with gzip.GzipFile(fileobj=io.BytesIO(s)) as gz:          
...     json.loads(gz.read().decode('utf-8'))
...                                                           
{u'messages': None, u'message': None, u'code': {u'value': u'7', u'_name': u'TOKEN'}, u'data': {u'url': None, u'token': u'-6311578294670676495', u'parameters': None}}                                                                                                                                         

这应该适用于Python 2.7和Python 3.x.仅适用于Python 3,它更简单:

>>> json.loads(gzip.decompress(s).decode('utf-8'))
{'code': {'_name': 'TOKEN', 'value': '7'}, 'messages': None, 'message': None, 'data': {'url': None, 'token': '-6311578294670676495', 'parameters': None}}