PHP CURL: HTTP / 1.1 Требуется длина 411

Даже если я указал длину содержимого, я все равно получаю сообщение об ошибке:

Требуемая длина


Ошибка 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

Решение

Вы уверены, что вам нужно использовать опцию аутентификации NTLM?

curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);

Я проверил с этим, и это вызывает content-type заголовок, а также полезная нагрузка JSON, которая будет опущена в запросе.

Попробуйте удалить эту строку и посмотрите, как работает запрос.

2

Другие решения

Вы устанавливаете Content-length в длину $ data, но вместо $ data вы публикуете $ update_json

1

У меня была такая же проблема, и я несколько часов ломал себе мозги.
Просто удалите длину содержимого из заголовка:

как это

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