PHP卷曲请求返回HTTP错误411:请求必须分块或具有内容长度

时间:2017-10-01 19:50:55

标签: php curl

我试图在PHP中发送以下CURL请求。但它返回:" HTTP错误411.请求必须被分块或具有内容长度。"

包含CURL请求的PHP脚本:

<?php
$numbers = 9999999999;
$message = "Test";
$message = urlencode($message);
$port = 80;
$url = "http://191.95.51.64/API/sendsms.aspx?loginID=myloginid&password=mypassword&mobile=".$numbers."&text=".$message."&senderid=ABCDEF&route_id=1&Unicode=1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ( $ch, CURLOPT_PORT, $port );
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ( $ch, CURLOPT_TIMEOUT, 20 );
curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 20 );
$output = curl_exec($ch);
$err = curl_error($ch);
curl_close($ch);    
if ($err) {
    echo $err;
} else {
    echo $output;
}
?>  

输出:

Length Required

HTTP Error 411. The request must be chunked or have a content length.  

由于我是新手使用PHP Curl,所以我无法找出错误的原因。如果有人可以通过一个例子简要地指导我解决方案,我将非常感激他。谢谢!

2 个答案:

答案 0 :(得分:17)

由于您的数据似乎是作为网址参数发送的,因此请尝试将内容长度标头添加为零,如下所示:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: 0'));

也可以尝试添加一个空的POST正文,而不是触摸内容长度标题。根据您要发布到哪种类型的HTTP服务器,行为略有不同(IIS,LightHTTPD,Apache)。

空帖体类似:

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array()));

答案 1 :(得分:1)

您忘了关闭报价:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: 0'));