即使我已经指定了内容长度,我仍然收到错误:
所需长度
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);
任何想法都错了吗?
答案 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"))