2014-11-13 2 views
0

Я просто пытаюсь получить тело ответа, когда запрос сообщения не работает с использованием RCurl. Когда я запускаю его через R, я получаю только ошибку ответа, и он выходит из строя.RCURL получить тело ответа, когда он ошибается

Error: Unprocessable Entity 

когда я отправляю тот же запрос с интерфейсом UI для тестирования, оно дает

{ 
"reason": [ 
    "Can not create Data with Name: DataTest. Data Name should be unique." 
], 
"singleReason": "Can not create Data with Name: DataTest. Data Name should be unique." 
} 

Любая помощь в том, чтобы получить органы реагирования на ошибки 4xx ценится. ТИА.

запрос Сообщение

postdata.json <- '{"name":"DataTest","description":"Test Payload","algorithm":{"name":"DataTest","version":"0.1.0"}}' 
post.result <- httpPOST(url=SERVER, postfields = postdata.json, verbose = T, 
         httpheader=c(Authorization=access.token, 'Content-Type'='application/json', Accept='application/json')) 

выход RStudio

* About to connect() to SERVER port 80 (#0) 
* Trying SERVER... * connected 
* Connected to SERVER port 80 (#0) 
> POST /api/test HTTP/1.1 
Host: SERVER 
Authorization: AUTHENTICATION 
Content-Type: application/json 
Accept: application/json 
Content-Length: 171 

< HTTP/1.1 422 Unprocessable Entity 
< Content-Type: application/json;charset=UTF-8 
< Date: Thu, 13 Nov 2014 16:31:42 GMT 
< Server: Apache-Coyote/1.1 
< Content-Length: 215 
< Connection: keep-alive 
< 
* Connection #0 to host SERVER left intact 
Show Traceback 

Rerun with Debug 
Error: Unprocessable Entity 

нотабене Я в порядке с ним, и я возвращаю ошибку. Это ожидалось. Я просто пытаюсь получить тело ответа, связанное с кодом ошибки.

+1

Просьба представить минимально воспроизводимый пример, демонстрирующий проблему, с которой вы сталкиваетесь. – jdharrison

+0

Используйте опции 'writefunction' и/или' debugfunction', которые будут переданы 'curlPerform. Или, дайте ** httr ** взгляд на немного более простой интерфейс. – Thomas

ответ

0

Я был в состоянии получить тело ответа, используя RCurl путем добавления basicTextGatherer() и writefunction.

reader <- basicTextGatherer() 
post.result <- httpPOST(url=SERVER, postfields = postdata.json, verbose = T, 
         writefunction = reader$update, 
         httpheader=c(Authorization=access.token, 
             'Content-Type'='application/json', 
             Accept='application/json') 
         ) 
return(body=reader$value()) 

, но решение Hadley проще в работе и не вызывает ошибок.

1

Вот один подход с HTTR:

library(httr) 

postdata.json <- '{"name":"DataTest","description":"Test Payload","algorithm":{"name":"DataTest","version":"0.1.0"}}' 

res <- POST(SERVER, 
    body = postdata.json, 
    add_headers(
    Authorization = access.token, 
    'Content-Type' = 'application/json', 
    Accept = 'application/json' 
) 
) 

http_status(res) 
content(res)