如何解压缩gzip请求PHP / Lumen / Laravel?

问题描述 投票:2回答:1

我收到来自第三方的gzip编码文本请求(~1mb因此有意义)

我的测试路线:

$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(): data error

我也试过gzuncompress触发

gzuncompress(): data error

我究竟做错了什么?如何解压缩gzip请求?

php laravel-5 http-post gzip lumen
1个回答
2
投票

对于gzip压缩内容,您需要使用gzdecode()

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

这是内置在PHP上的。

gzinflate()使用compresed(非gzipped)字符串处理deflated(非gzipped)和gzuncompress()。

文档:

© www.soinside.com 2019 - 2024. All rights reserved.