Я работаю с Zabbix API, где я думаю, что Content-Type
должен быть установлен в application/json-rpc
(что бы это ни отличалось от json).Как указать тело в httr POST для содержимого содержимого приложения json-rpc [R]
Я создал curl
запрос, который работает должным образом
curl -H "Content-Type:application/json-rpc" \
-X POST https://zabbix_host/api_jsonrpc.php \
-v \
-A "UserAgentJakis" \
-d '{"jsonrpc":"2.0","method":"history.get","params":{"output":"extend","itemids":"100100001196479","history":0,"sortfield":"clock","sortorder":"DESC","limit":10},"auth":"3421b7f82e38323506264018de256bdd","id":1}'
тело (-d
) был создан в R с
toJSON(list(jsonrpc = jsonlite::unbox("2.0"),
method = jsonlite::unbox("history.get"),
params = jsonlite::unbox(
data.frame(output = "extend",
itemids = "100100001196479",
history = 0,
sortfield = "clock",
sortorder = "DESC",
limit = 10)),
auth = jsonlite::unbox("3421b7f82e38323506264018de256bdd"),
id = jsonlite::unbox(1)))
и теперь я пытаюсь запустить это в R, используя httr
пакет, но это выглядит как традиционная спецификация кузова для json
Тип не работает json-rpc
> httr::POST(url,
+ content_type('application/json-rpc'),
+ #encode = "json",
+ user_agent("example"),
+ body =
+ list(jsonrpc = jsonlite::unbox("2.0"),
+ method = jsonlite::unbox("history.get"),
+ params = jsonlite::unbox(
+ data.frame(output = "extend",
+ itemids = "100100001196479",
+ history = 0,
+ sortfield = "clock",
+ sortorder = "DESC",
+ limit = 10)),
+ auth = jsonlite::unbox("3421b7f82e38323506264018de256bdd"),
+ id = jsonlite::unbox(1)),
+ verbose()
+) -> zabbix_response
-> POST /api_jsonrpc.php HTTP/1.1
-> User-Agent: example
-> Host: /i_have_deleted_that/
-> Accept-Encoding: gzip, deflate
-> Accept: application/json, text/xml, application/xml, */*
-> Content-Length: 564
-> Expect: 100-continue
-> Content-Type: application/json-rpc; boundary=------------------------468f366928125e3c
->
<- HTTP/1.1 100 Continue
>> --------------------------468f366928125e3c
>> Content-Disposition: form-data; name="jsonrpc"
>>
>> 2.0
>> --------------------------468f366928125e3c
>> Content-Disposition: form-data; name="method"
>>
>> history.get
>> --------------------------468f366928125e3c
>> Content-Disposition: form-data; name="params"
>>
>> 1
>> --------------------------468f366928125e3c
>> Content-Disposition: form-data; name="auth"
>>
>> 3421b7f82e38323506264018de256bdd
>> --------------------------468f366928125e3c
>> Content-Disposition: form-data; name="id"
>>
>> 1
>> --------------------------468f366928125e3c--
<- HTTP/1.1 200 OK
<- Server: nginx/1.8.0
<- Date: Fri, 15 Apr 2016 16:00:30 GMT
<- Content-Type: application/json
<- Transfer-Encoding: chunked
<- Connection: close
<- X-Powered-By: PHP/5.5.23
<- Content-Encoding: gzip
<-
> zabbix_response$request$output
list()
attr(,"class")
[1] "write_memory" "write_function"
> cat(rawToChar(zabbix_response$content))
{"jsonrpc":"2.0","error":{"code":-32700,"message":"Parse error","data":"Invalid JSON. An error occurred on the server while parsing the JSON text."},"id":null}
Кто-нибудь знает, как правильно указать этот параметр тела в httr::POST
для этого запроса на завивание?
Вы можете дать [curlconverter] (https://cran.r-project.org/web/packages/curlconverter/index.html) попытку. Он преобразует операцию командной строки curl в функцию R. – Thomas
Я проверил это и получил ошибку 'Ошибка: буфер обмена на Unix-подобных системах требует« xclip »(рекомендуется) или« xsel ». Поэтому я думаю, что это не связано с моей проблемой: P –
Ответ опубликован здесь http: // stackoverflow.com/a/36697667/3857701 –