2014-11-16 2 views
0

Я пишу веб-парсер, который подключается к серверу (ничего нелогичного). Запрос получает следующий ответ:Неизвестная кодировка ответа: собрано urequest.urlopen()

\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 

Может быть, передача-кодировка: chunked означает что-то.

Любые идеи, как декодировать это? Любая помощь будет оценена по достоинству.

+0

Ваше содержание архивированная в соответствии с 'Content-Encoding' –

ответ

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}} 
+0

Спасибо, объяснил довольно ясно! – tna0y

Смежные вопросы