PHP CURL:HTTP / 1.1 411长度必需

时间:2016-01-28 16:28:32

标签: php curl content-length

即使我已经指定了内容长度,我仍然收到错误:

  

所需长度

  

HTTP错误411.请求必须分块或具有内容长度。

这是我的代码

$curl = curl_init();
$data = array("Key" => "Value", "Key2" => "Value2");
$data = json_encode($data);
$length = strlen($data);

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($curl, CURLOPT_USERPWD, "username:password");
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=utf-8", "Content-Length: $length"));
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_HEADER, true);

$result = curl_exec($curl);

任何想法都错了吗?

3 个答案:

答案 0 :(得分:2)

您确定需要使用NTLM身份验证选项吗?

curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);

我测试了它,它导致content-type标头以及JSON有效负载从请求中省略。

尝试删除该行并查看请求是否有效。

答案 1 :(得分:1)

您将Content-length设置为$ data的长度,但是您发布$ update_json而不是$ data

答案 2 :(得分:0)

我有同样的问题,并在几个小时内打破了我的大脑。 只需从标题中删除内容长度:

像这样

curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=utf-8"))