我试图在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,所以我无法找出错误的原因。如果有人可以通过一个例子简要地指导我解决方案,我将非常感激他。谢谢!
答案 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'));