Я пытался обновить существующего пользователя Nextcloud через его API. Когда я делаю это напрямую через оболочку, это работает
curl -u user:pass -X PUT "https://example.org/ocs/v1.php/cloud/users/admin" -H "OCS-APIRequest: true" -d key="quota" -d value="5GB"
Но когда я пытаюсь сделать это через PHP с помощью следующего кода, он всегда возвращает «сбой 997»
$url = 'https://' . $ownAdminname . ':' . $ownAdminpassword . '@example.org/ocs/v1.php/cloud/users/admin';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$fields = array("quota" => "5GB");
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'OCS-APIRequest: true'
));
$response = curl_exec($ch);
curl_close($ch);
echo "Response: ".$response;
Разница между командой cURL и вставленным вами PHP-кодом заключается в плохо разработанный пользовательский API обеспечения.
Используя эти аргументы cURL:
-d key="quota" -d value="5GB"
… не эквивалентно полям, которые вы публикуете:
$fields = array("quota" => "5GB");
… скорее:
$fields = array(
'key' => 'quota',
'value' => '5GB',
);
Объяснение для 997
код, который вы получаете, можно найти в https://github.com/owncloud/core/blob/v10.0.3/apps/provisioning_api/lib/Users.php#L269-L272: так как нетkey
» ключ в представленных данных ($parameters['_put']['key']
будет оценивать как null
) и отсюда ошибка.
Других решений пока нет …