在 curl HTTP post 中设置内容长度
Setting content length in curl HTTP post
我正在对 url 执行 HTTP post 以使用 php 和 curl 检索文件的内容,如下所示:
$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 阻止 - "Post request must have a content length header"。作为一个快速修复,我有那个规则 white-listed,但我宁愿不必这样做。那么如何在上面的代码中添加内容长度header?
您需要将 Content-Length
传递给 CURLOPT_HTTPHEADER
。您似乎没有发送任何内容,因此 Content-Length
将为 0。因此:
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
"Content-Length: 0"
));
我正在对 url 执行 HTTP post 以使用 php 和 curl 检索文件的内容,如下所示:
$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 阻止 - "Post request must have a content length header"。作为一个快速修复,我有那个规则 white-listed,但我宁愿不必这样做。那么如何在上面的代码中添加内容长度header?
您需要将 Content-Length
传递给 CURLOPT_HTTPHEADER
。您似乎没有发送任何内容,因此 Content-Length
将为 0。因此:
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
"Content-Length: 0"
));