RCurl получает ответное тело при ошибке
Я просто пытаюсь получить тело ответа, когда не удается отправить запрос с помощью RCurl. Когда я запускаю его через R, я получаю только ошибку ответа, и она выходит из строя.
Error: Unprocessable Entity
когда я отправляю тот же запрос с интерфейсом пользовательского интерфейса для тестирования, он дает
{
"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
nb У меня все в порядке с ошибкой и возвращением ошибки. Это ожидается. Я просто пытаюсь получить тело ответа, связанное с кодом ошибки.
2 ответа
Решение
Я смог получить тело ответа, используя RCurl, добавив basicTextGatherer() и функцию записи.
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())
но с решением Хэдли проще работать и не ошибиться.
Вот один подход с 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)