【问题标题】:Setting content length in curl HTTP post在 curl HTTP post 中设置内容长度
【发布时间】:2017-08-23 01:32:44
【问题描述】:

我正在使用 php 和 curl 对 url 进行 HTTP 发布以检索文件的内容,如下所示:

    $url = SITE_URL . 'filename.html';
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_POST, TRUE);
    curl_setopt($curl, CURLOPT_FAILONERROR, TRUE);
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3B48b Safari/419.3');
    $content = curl_exec($curl);
    $cerr = curl_error($curl);
    $info = curl_getinfo($curl);
    curl_close($curl);

这在一台服务器上运行良好,但是当我移动到新服务器时,它被 ModSec 规则 390616 阻止 - “发布请求必须具有内容长度标头”。作为快速修复,我已将该规则列入白名单,但我不希望这样做。那么如何在上面的代码中添加内容长度标头呢?

【问题讨论】:

  • 内容是什么?您似乎没有传递任何参数。

标签: php curl content-length


【解决方案1】:

您需要将Content-Length 传递给CURLOPT_HTTPHEADER。您似乎没有发送任何内容,所以Content-Length 将是 0。所以:

curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    "Content-Length: 0"
));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多