2014-11-13 17 views
0

RCurl을 사용하여 게시물 요청이 실패 할 때 응답 본문을 가져 오려고합니다. R을 통해 실행할 때 응답 오류 만 발생하고 실패합니다. 내가 테스트를위한 UI 인터페이스와 같은 요청을 게시 할 때RCurl은 오류가 발생했을 때 응답 본문을 가져옵니다.

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 오류에 응답 본문을하는 방법에 어떤 도움을 제공합니다. TIA.

POST 요청

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 

N.B. 나는 그것이 실패하고 오류를 반환하는 것으로 괜찮습니다. 예상대로입니다. 오류 코드와 관련된 응답 본문을 가져 오려고합니다.

+1

발생하는 문제를 보여주는 최소한의 재현 가능한 예를 제공해주십시오. – jdharrison

+0

'curlPerform '에 전달 될'writefunction' 및/또는'debugfunction' 옵션을 사용하십시오. 또는 ** httr **에 약간 더 간단한 인터페이스를 제공하십시오. – Thomas

답변

0

.

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()) 

그러나 해들리의 솔루션은 작업하기가 더 간단하고 오류가 발생하지 않습니다.

1

여기 HTTR 하나의 접근 방식 : 나는 basicTextGatherer()와 writefunction을 추가하여 RCurl를 사용하여 응답 본문을 얻을 수있었습니다

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) 
관련 문제