Как распаковать gzip-запрос PHP / Lumen / Laravel? - PullRequest
2 голосов
/ 27 марта 2019

Я получаю запросы от третьих лиц, которые представляют собой текст в кодировке gzip (~ 1 МБ, так что это имеет смысл)

Мой тестовый маршрут:

$router->post(
    'testgzip',
    function (\Illuminate\Http\Request $request) {
        $decompressed = null;
        if ($request->header('content-encoding') === 'gzip') {
            $decompressed = gzinflate($request->getContent());
        }

        return [
            'body' => $decompressed ?? $request->getContent(),
        ];
    }
);

Мой тестовый файл test.txt

hello world!

Мой контроль работоспособности:

curl --data-binary @test.txt -H "Content-Type: text/plain" -X POST http://localhost:8000/testgzip 
{"body":"hello world!"}    

Чтобы сжать его, я запускаю команду gzip test.txt

Мой локон:

curl --data-binary @test.txt.gz -H "Content-Type: text/plain" -H "Content-Encoding: gzip" -X POST http://localhost:8000/testgzip

, который вызывает

gzinflate (): ошибка данных

Я также пробовал gzuncompress, который запускает

gzuncompress (): ошибка данных

Что я делаю не так?Как мне распаковать gzip-запрос?

1 Ответ

2 голосов
/ 27 марта 2019

Для содержимого в формате gzip вам необходимо использовать gzdecode().

$decompressed = gzdecode($request->getContent());

Это встроено в PHP.

gzinflate () работает с deflated (не gzipped) и gzuncompress () со сжатыми (не сжатыми) строками.

Документы:

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