使用 httr 包,设置 header 其中 header 名称是一个变量
Using httr package, setting a header where the header name is a variable
我想在使用 R httr 包的请求中设置一个 header 并设置一个 header,当我在变量中有 header 的名称时。
我想做这样的事情:
tokenName = 'X-Auth-Token'
get_credentials_test <- function (token) {
url <- paste(baseUrl,"/api/usercredentials", sep = '')
r <- GET(url, add_headers(tokenName = token))
r
}
然而,上面的代码似乎设置了一个名为 tokenName 的 header。
如果我执行以下操作,它确实有效:
get_credentials_test <- function (token) {
url <- paste(baseUrl,"/api/usercredentials", sep = '')
r <- GET(url, add_headers('X-Auth-Token' = token))
r
}
但是如果 header 的名称发生变化并且添加 header 的要求在代码周围自由散布,我希望有一些灵活性。我不确定是否可以添加包含变量的 header,但这是我想要做的。
您可以创建 headers 作为命名向量,然后将其作为 .headers
参数传递:
h <- c(token)
names(h) <- tokenName
r <- GET(url, add_headers(.headers = h))
虽然这是可行的,因为 add_headers
采用 .headers
参数 (see here),但调用具有任意参数名称的函数的更通用的替代方法是 do.call
:
h <- list(token)
names(h) <- tokenName
r <- GET(url, do.call(add_headers, h))
使用 structure()
很容易:
get_creds <- function(base.url, path, header.name, token) {
url <- paste0(base.url, path)
header <- structure(token, names = header.name)
r <- httr::GET(url, httr::add_headers(header))
r
}
我想在使用 R httr 包的请求中设置一个 header 并设置一个 header,当我在变量中有 header 的名称时。
我想做这样的事情:
tokenName = 'X-Auth-Token'
get_credentials_test <- function (token) {
url <- paste(baseUrl,"/api/usercredentials", sep = '')
r <- GET(url, add_headers(tokenName = token))
r
}
然而,上面的代码似乎设置了一个名为 tokenName 的 header。
如果我执行以下操作,它确实有效:
get_credentials_test <- function (token) {
url <- paste(baseUrl,"/api/usercredentials", sep = '')
r <- GET(url, add_headers('X-Auth-Token' = token))
r
}
但是如果 header 的名称发生变化并且添加 header 的要求在代码周围自由散布,我希望有一些灵活性。我不确定是否可以添加包含变量的 header,但这是我想要做的。
您可以创建 headers 作为命名向量,然后将其作为 .headers
参数传递:
h <- c(token)
names(h) <- tokenName
r <- GET(url, add_headers(.headers = h))
虽然这是可行的,因为 add_headers
采用 .headers
参数 (see here),但调用具有任意参数名称的函数的更通用的替代方法是 do.call
:
h <- list(token)
names(h) <- tokenName
r <- GET(url, do.call(add_headers, h))
使用 structure()
很容易:
get_creds <- function(base.url, path, header.name, token) {
url <- paste0(base.url, path)
header <- structure(token, names = header.name)
r <- httr::GET(url, httr::add_headers(header))
r
}