Как мне перевести мой CLI curl POST api создать пользовательский вызов в R httr? - PullRequest
0 голосов
/ 22 марта 2020

Я хочу добавить пользователей в группы в nextcloud через их API .

Мне удалось добавить одного пользователя (ncuser) в Group1 и Group2 из моего CLI, выполнив этот запрос:

curl -X POST https://adminuser:'admin pass phrase'@cloud.example.org/ocs/v1.php/cloud/users/ncuser/groups -d groupid="Group1" -d groupid="Group2" -H "OCS-APIRequest: true"

Со следующим ответом:

<?xml version="1.0"?>
<ocs>
 <meta>
  <status>ok</status>
  <statuscode>100</statuscode>
  <message>OK</message>
  <totalitems></totalitems>
  <itemsperpage></itemsperpage>
 </meta>
 <data/>
</ocs>

Я попытался выполнить запрос в Rstudio с этим кодом:

library(curl)
library(httr)

call <- POST("https://adminuser:'admin pass phrase'@cloud.example.org/ocs/v1.php/cloud/users/ncuser/groups",
     body = list(groupid = "Group1", groupid = "Group2"),
     add_headers('OCS-APIRequest' = "true", 'Content-Type' = "application/x-www-form-urlencoded"))

Но это не удачно. Я получаю этот ответ в R:

Response [https://adminuser:'admin pass phrase'@cloud.example.org/ocs/v1.php/cloud/users/ncuser/groups]
  Date: 2020-03-22 15:43
  Status: 401
  Content-Type: application/json; charset=utf-8
  Size: 140 B

Вот содержание моего запроса R POST:

content(call)

$ocs
$ocs$meta
$ocs$meta$status
[1] "failure"

$ocs$meta$statuscode
[1] 997

$ocs$meta$message
[1] "Current user is not logged in"

$ocs$meta$totalitems
[1] ""

$ocs$meta$itemsperpage
[1] ""


$ocs$data
list()

Похоже, я не смог войти через POST () url, и нужно добавить adminuser и 'фразу-пароль администратора' каким-либо другим способом, но я не уверен, как это сделать.

Кроме того, в документации API nextcloud указано, что OCS-APIRequest и тип содержимого должен быть указан в заголовке, но я не уверен, правильно ли я это сделал.

Все вызовы конечных точек OCS требуют, чтобы заголовок OCS-APIRequest был установлен в true.

Для всех запросов POST требуется заголовок Content-Type: application / x- www-form-urlencoded. (Примечание: некоторые библиотеки, такие как cURL, устанавливают этот заголовок автоматически, другие требуют явной установки заголовка.)

Как мой запрос POST должен быть записан в R, чтобы я мог успешно добавлять пользователей nextcloud в группы?

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 22 марта 2020

Возможно, попробуйте

call <- POST("https://cloud.example.org/ocs/v1.php/cloud/users/ncuser/groups",
     body = list(groupid = "Group1", groupid = "Group2"),
     add_headers('OCS-APIRequest' = "true"),
     authenticate("adminuser", "admin pass phrase"),
     encode = "form")

Это обеспечит правильное кодирование тела POST и безопаснее передаст имя пользователя / пароль. Вы также можете попробовать добавить verbose(), чтобы получить больше вывода. Вам будет нелегко помочь без какого-либо воспроизводимого примера , который мы можем использовать для тестирования.

...