Какая функция для дефлятирования HTTP-запроса?

Я делаю HTTP-запрос POST к удаленному сервису, который требует, чтобы тело сообщения было «дефлировано» (и Content-encoding: deflate следует отправлять в заголовках). Насколько я понимаю, это кроется в RFC 1950. Какую функцию php я должен использовать, чтобы быть совместимым?

  • gzencode
  • gzdeflate
  • gzcompress

0

Решение

Content-Encoding: deflate требует представления данных используя структуру zlib (определенную в RFC 1950), с алгоритмом сжатия deflate (определенным в RFC 1951).

Рассматривать

<?php
$str = 'test';

$defl = gzdeflate($str);
echo bin2hex($defl), "\n";

$comp = gzcompress($str);
echo bin2hex($comp), "\n";
?>

Это дает нам:

2b492d2e0100
789c2b492d2e0100045d01c1

Итак gzcompress Результатом является gzdeflateбуфера предшествует 789c, который представляется действительным заголовком zlib

0111     |  1000       |  11100   |  0        |  10
CINFO    |  CM         |  FCHECK  |  FDICT    |  FLEVEL
7=32bit  |  8=deflate  |          |  no dict  |  2=default algo

и затем 4 байта контрольной суммы. Это то, что мы ищем.

Подвести итог,

  • gzdeflate возвращает необработанный дефлированный буфер (RFC 1951)
  • gzcompress возвращает дефлированный буфер, упакованный в материал zlib (RFC 1950)
  • Content-Encoding: deflate требует обернутого буфера, то есть использование gzcompress при отправке дефлированных данных.

Обратите внимание на запутанные названия: gzdeflate является не за Content-Encoding: deflate а также gzcompress является не за Content-Encoding: compress, Пойди разберись!

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector