如何使用R中的oauth2令牌从Web服务器检索数据?

时间:2019-04-08 18:55:06

标签: r api

我已经成功地从oauth2.0请求接收到访问令牌,以便可以开始从服务器获取一些数据。但是,每次尝试我都会收到错误403。 API对我来说是很新的,我只是使用R的入门级,所以我无法弄清楚我的请求出了什么问题。我目前使用的是crul软件包,但是我也尝试使用httr软件包发出请求,但是如果没有遇到403错误,我将无法通过任何请求。我有一个闪亮的应用程序,最后我希望能够使用从另一个实际存储数据的应用程序导入的数据进行刷新,但是我想尝试先将数据拉到本地控制台上,这样我才能理解基本过程这样。我将发布一些当前的尝试。

(x <- HttpClient$new(
url = 'https://us.castoredc.com',
opts = list( exceptions = FALSE),
headers = list())
)
res.token <- x$post('oauth/token',
body = list(client_id = "{id}",
client_secret = "{secret}",
grant_type = 'client_credentials'))

importantStuff <- jsonlite::fromJSON(res$parse("UTF-8"))

token <- paste("Bearer", importantStuff$access_token)

我获得了我的令牌,但是以下操作似乎无效。### 我正在尝试获取学习代码列表,以便可以在 进一步要求从研究中实际获取数据。

res.studies <- x$get('/api/study',headers = list(Authorization = 
token,client_id = "{id}",
client_secret = "{secret}",
grant_type = 'client_credentials'),
body = list(
content_type = 'application/json'))

他们的支持团队为我提供了上述端点来访问内容,但是我收到403,所以我认为我没有正确使用令牌?

status: 403
access-control-allow-headers: Authorization
access-control-allow-methods: Get,Post,Options,Patch

3 个答案:

答案 0 :(得分:3)

我是Castor EDC的首席执行官,虽然很高兴看到Castor EDC的问题,但对于您为弄清楚这一点而付出的时间,我深表歉意。我们的支持团队无法提供更多帮助吗?

无论如何,我实际上已经在R中使用了我们的API,并且如果您需要更多帮助,我们内部也会有一位出色的R工程师。

考虑到您的答案,是的,您始终需要一个研究ID才能对API进行任何有趣的操作。让您的生活更轻松的一件事是我们的R API包装器,您可以在这里找到:https://github.com/castoredc/castoRedc

这样,您将:

remotes::install_github("castoredc/castoRedc")
library(castoRedc)
castor_api <- CastorData$new(key = Sys.getenv("CASTOR_KEY"), 
                             secret = Sys.getenv("CASTOR_SECRET"), 
                             base_url = "https://data.castoredc.com")
example_study_id <- studies[["study_id"]][1]
fields <- castor_api$getFields(example_study_id)

希望将来使您的生活更加轻松。

答案 1 :(得分:1)

因此,经过一番调查,事实证明,您首先必须请求使用用户名为每个Castor研究获取另一个ID。我将发布一些最终成功的示例代码。

req.studyinfo <- httr::GET(url = "us.castoredc.com/api/study"
,httr::add_headers(Authorization = token))
json <- httr::content(req.studyinfo,as = "text")
studies <- fromJSON(json)

然后,这将为您提供Castor中的学习列表,您可以为其获取端点所关心的ID。这将是一个包含包含此信息的数据框的列表。 您可以使用相同的格式,并在文档中发布所需的任何端点,以检索数据。感谢您的观察!如果有人雇用任何人从Castor EDC中使用的数据中开发出任何东西,我将在此保留。他们的文档对我来说很模糊,所以也许将来会对某人有所帮助。 下一步的示例:

req.studydata <- httr::GET("us.castoredc.com/api/study/{study id obtained 
from previous step}/data-point- 
collection/study",,httr::add_headers(Authorization = 
token))
json.data <- httr::content(req.studydata,as = "text")
data <- fromJSON(json.data)

答案 2 :(得分:1)

这对我有用,我删除了 Sys.getenv()部分

library(castoRedc)
castor_api <- CastorData$new(key = "CASTOR_KEY", 
                             secret = "CASTOR_SECRET", 
                             base_url = "https://data.castoredc.com")
example_study_id <- studies[["study_id"]][1]
fields <- castor_api$getFields(example_study_id)