обнаружение, содержит ли тело сжатые данные - PullRequest
1 голос
/ 12 апреля 2011

У меня есть программа, в которой она ищет ответ от запроса curl для определенных строк. я иногда получаю сжатые данные. Есть ли способ узнать, является ли ответ текст или GZIP-формат? заголовок иногда содержит gziipped, дефлят заголовка, но это не соответствует. Есть ли способ найти строку и найти, если она gzipped?

Ответы [ 5 ]

3 голосов
/ 12 апреля 2011

Вы можете попробовать взглянуть на первые два байта данных.Для сжатых данных они должны быть 0x1f, 0x8b .

Member header and trailer

ID1 (IDentification 1)
ID2 (IDentification 2)
These have the fixed values ID1 = 31 (0x1f, \037), ID2 = 139 (0x8b, \213),
to identify the file as being in gzip format.
2 голосов
/ 12 апреля 2011

Вы можете посмотреть первые байты файла.Возможно, они содержат магическое число .

0 голосов
/ 27 апреля 2011

Соответствующие стандартам HTTP-ответы будут содержать заголовок Content-Encoding или Transfer-Encoding: с указанием «gzip» для сжатых ответов, что избавляет от необходимости угадывать, глядя на магическое число. К сожалению, многие сайты неправильно используют эти заголовки.

0 голосов
/ 12 апреля 2011

Вы можете передать его через zcat, и если это не удастся, используйте строку как есть. Неряшливый, я знаю, но это должно быть надежно; простой текстовый файл никогда не будет содержать действительные данные в сжатом формате.

0 голосов
/ 12 апреля 2011

Формат файла gzip начинается с некоторых «магических байтов». Вы можете проверить, начинается ли тело с них, и, если это так, сдвинуть байты обратно в поток и начать его разархивирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...