使用Nextcloud / owncloud API进行cURL PUT请求

时间:2017-11-15 18:31:24

标签: php curl owncloud nextcloud

我尝试通过他们的API更新现有的Nextcloud用户。当我直接通过shell进行它时,它可以工作

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使用以下代码执行此操作时,它始终返回“failure 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;

1 个答案:

答案 0 :(得分:0)

cURL命令与您粘贴的PHP代码之间的区别在于poorly designed user provisioning API

使用这些cURL参数:

-d key="quota" -d value="5GB"

...不等同于您发布的字段:

$fields = array("quota" => "5GB");

...而是:

$fields = array(
    'key' => 'quota',
    'value' => '5GB',
);

您可以在https://github.com/owncloud/core/blob/v10.0.3/apps/provisioning_api/lib/Users.php#L269-L272中找到您获得的997代码的说明:因为提交的数据中没有“key$parameters['_put']['key']将评估为null),从而导致错误。