使用php curl http post在ownCloud上创建用户


Creating User on ownCloud using php curl http post

在owncloud相关网站和stackoverflow本身的以下链接中,所有相关信息都以破碎的形式存在:

  1. 用户配置Api-Owncloud
  2. PHP+curl,HTTP POST示例代码
  3. 使用Ajax Jquery在ownCloud上创建用户
  4. 用户设置-php身份验证错误

我正在尝试做一些非常简单的事情:

  1. 我在本地主机中设置了一个owncloud服务器
  2. 我有一个html页面,其中包含用户名和密码的字符串值
  3. 我发送页面请求,由以下php脚本处理。

    <?phpecho"开始处理凭据,首先它将存储在本地变量中"。"<br/>";//加载到局部变量$userName=$_POST['userName];$RR密码=$_POST[密码];回声"你好"$用户名。"<br/>";echo"您的密码是"$RR密码。"<br/>";//将数据添加到owncloudpost数组,然后发送http请求以创建新用户$ownCloudPOSTArray=数组('username'=>$username,'password'=>$RRpassword);$url='http://localhost/owncloud/ocs/v1.php/cloud/users';$ch=curl_init($url);curl_setopt($ch,CURLOPT_POST,1);curl_setopt($ch,CURLOPT_POSTFIELDS,$ownCloudPOSTArray);curl_setopt($ch,CURLOPT_RETURNTTRANSFER,true);$response=curl_exec($ch);curl_close($ch);echo"<br/>在owncloud中创建了一个新用户";?>

我得到的输出是:

开始处理凭据,首先它将存储在本地variables
你好Frank
您的密码是frankspassword
failure 997未经授权
在owncloud 中创建新用户

我还尝试使用以下php脚本登录到自己的云:

// Login As Admin
$ownAdminname = 'ownAdmin';
$ownAdminpassword = 'ownAdminPassword';
$ch = curl_init('http://localhost/owncloud');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$ownAdminname:$ownAdminpassword");
$output = curl_exec($ch);
curl_close($ch);
echo $output;

即使这一次也失败了。

总之,它不起作用。我也无法通过类似的脚本登录到owncloud。做这件事的正确方法是什么?我缺少什么设置?有人能帮忙吗?

由于这个问题专门涉及owncloud,我创建了一个帐户,并在owncloud论坛中发布了一个将这个问题链接到它的问题。

在那里,我得到了owncloud大师@RealRancor的建议,下面是

只是换了一个外观,也许它很容易更换:

$url='http://localhost/owncloud/ocs/v1.php/cloud/users';

带有

$url='http://adminuser:adminpass@localhost/owncloud/ocs/v1.php/cloud/users';

如文档中所示。

令人惊讶的是,它像一种魅力。下面是整个修改后的php脚本:

<pre>
&lt;?php
echo "Begun processing credentials , first it will be stored in local variables" . "<br/>";
// Loading into local variables
$userName = $_POST['username'];
$RRpassword = $_POST['password'];
echo "Hello " . $userName . "<br/>";
echo "Your password is " . $RRpassword . "<br/>";
 // Login Credentials as Admin
 $ownAdminname = 'ownAdmin';
 $ownAdminpassword = 'ufi2016%%';

// Add data, to owncloud post array and then Send the http request for creating a new user
$url = 'http://' . $ownAdminname . ':' . $ownAdminpassword . '@localhost/owncloud/ocs/v1.php/cloud/users';
echo "Created URL is " . $url . "<br/>"; 
$ownCloudPOSTArray = array('userid' => $userName, 'password' => $RRpassword );
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $ownCloudPOSTArray);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo "Response from curl :" . $response;
echo "<br/>Created a new user in owncloud<br/>";
// Add to a group called 'Users'
$groupUrl = $url . '/' . $userName . '/' . 'groups';
echo "Created groups URL is " . $groupUrl . "<br/>";
$ownCloudPOSTArrayGroup = array('groupid' => 'Users');
$ch = curl_init($groupUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $ownCloudPOSTArrayGroup);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo "Response from curl :" . $response;
echo "<br/>Added the new user to default group in owncloud";
?>
</pre>

这是输出:

Begun processing credentials , first it will be stored in local variables
Hello Frank
Your password is frankspassword
Created URL is http://ownAdmin:ufi2016%%@localhost/owncloud/ocs/v1.php/cloud/users
Response from curl : ok 100 
Created a new user in owncloud
Created groups URL is http://ownAdmin:ufi2016%%@localhost/owncloud/ocs/v1.php/cloud/users/Frank/groups
Response from curl : ok 100 
Added the new user to default group in owncloud

owncloud文档指出,身份验证是通过基本的HTTP身份验证头来完成的。您当前正在做的是将凭据作为参数发送到API调用。您需要添加以下行:

curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $RRpassword);

CURLOPT_RETURNTTRANSFER中也有一个打字错误($curl而不是$ch)。

正如您链接的帖子(在Owncloud上创建用户)所示,您需要一个带有一些凭据的基本身份验证头。您需要提供管理员凭据。