RCurl 패키지를 사용하여 PiCloud's REST API 주위에 R 래퍼를 구현하여 API 서버에 HTTP (S) 요청을 수행합니다. API는 기본 HTTP 인증을 사용하여 사용자에게 충분한 권한이 있는지 확인합니다. 이것은 완벽하게 작동RCurl : 사이트가 WWW 인증없이 HTTP 401 코드로 응답 할 때 HTTP 인증
$ curl -u 'key:secret_key' https://api.picloud.com/job/?jids=12
다음 PiCloud 문서는 API를 사용하여 컬과 인증의 예를 제공합니다. 나는 다음과 같은 오류 메시지가 나타납니다이 기능을 실행
getURL("https://api.picloud.com/job/?jids=12", userpwd="key:secret")
: 동등한 RCurl의 명령이 번역
[1] "{\"error\": {\"msg\": \"No HTTP Authorization information present\", \"code\": 995, \"retry\": false}}"
더 깊이 문제를 탐험을 나는 curl 명령에 의해 만들어진 HTTP 요청이 포함 된 것을 발견 첫 번째 GET 명령의 Authorization 필드
RCurl은이 작업을 수행하지 않습니다. 대신 권한 필드가 설정되지 않은 채로 GET 요청을 보냅니다. 401 오류 코드와 WWW-Authenticate 필드를 가진 응답을 받으면 Authorization 필드에 다른 GET 요청을 보냅니다.
HTTP 사양에는 401 오류 코드와 함께 WWW-Authenticate 필드를 포함하는 메시지가 필요하지만 PiCloud API 메시지에는 포함되어 있지 않습니다. 따라서 userpwd 옵션으로도 getURL
을 호출 할 때 RCurl은 권한 필드가 설정된 GET 요청을 절대로 보내지 않습니다. 결과적으로 인증은 항상 실패합니다.
RCurl이 보낸 첫 번째 GET 메시지에서 권한 부여 필드를 설정하도록하는 방법이 있습니까? 그렇지 않다면 내가 사용할 수있는 다른 R 패키지가 있습니까?
. 감사! –
재사용 가능한 컬 핸들을 건네 주려면'getCurlHandle()'을 호출 할 때'httpauth = 1'을 설정해야합니다. (이것은'postForm()'이 기본 인증을 사용할 수있는 유일한 방법이었습니다.'httpauth'를'postForm()'의 매개 변수로 전달하지 못했습니다.) –