【问题标题】:curl command a gzipped POST body to an apache servercurl 命令将压缩后的 POST 正文发送到 apache 服务器
【发布时间】:2017-11-02 14:47:20
【问题描述】:

在我的 apache 2.2 服务器上正确激活 mod_deflate 后,我正在尝试通过 curl 命令行发送压缩后的正文。

我见过的所有教程都说要添加 -H'Content-Encoding: gzip' 和 gzip 我的正文文件,但是这失败了:

echo '{ "mydummy" : "json" }' > body
gzip body
curl -v -i http://localhost/mymodule -H'Content-Encoding: gzip' --data-binary @body.gz 

我的 apache 模块收到 0 个字节

如果 LogLevel 设置为调试,我会在我的 apache error.log 中得到:
[Thu Jun 01 14:29:03 2017] [debug] mod_deflate.c(900): [client 127.0.0.1] Failed to inflate input: cannot handle deflate flags

【问题讨论】:

    标签: apache curl post compression gzip


    【解决方案1】:

    问题是 mod_deflate 不喜欢这里显示的 gzip 标头:

    hexdump -C body.gz
    00000000  1f 8b 08 08 20 08 30 59  00 03 62 6f 64 79 00 ab  |.... .0Y..body..|
    00000010  56 50 ca ad 4c 29 cd cd  ad 54 52 b0 52 50 ca 2a  |VP..L)...TR.RP.*|
    00000020  ce cf 53 52 a8 e5 02 00  a6 6a 24 99 17 00 00 00  |..SR.....j$.....|
    00000030
    

    解决办法就是直接把它交给gzip,没有中间文件这一步,如果取一个流,它就不会打印headers,apache会喜欢body!

    echo '{ "mydummy" : "json" }' | gzip > body.gz
    curl -v -i http://localhost/mymodule -H'Content-Encoding: gzip' --data-binary @body.gz
    

    这行得通,apache 模块接收解压后的字节。

    这里可以看到header的不同,gzip文件中看不到文件名(body):

    hexdump -C body.gz
    00000000  1f 8b 08 00 08 0a 30 59  00 03 ab 56 50 ca ad 4c  |......0Y...VP..L|
    00000010  29 cd cd ad 54 52 b0 52  50 ca 2a ce cf 53 52 a8  |)...TR.RP.*..SR.|
    00000020  e5 02 00 a6 6a 24 99 17  00 00 00                 |....j$.....|
    0000002b
    

    【讨论】:

    • 使用--data-binary 代替-d 可能会更安全。
    • --data-binary-d 有什么区别?
    • @JayaAnanthram 参见 curl 的手册页:“当 --data 被告知从这样的文件中读取时,将删除回车和换行符”
    【解决方案2】:

    单行:

    echo '{"mydummy": "json"}' | gzip | curl -v -i --data-binary @- -H "Content-Encoding: gzip" http://localhost/mymodule
    

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 2016-10-10
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多