R-Shiny中content函数对response类对象报错的原因及解决方案
R Shiny中调用httr的content()函数报错解决方案
问题现象
普通R环境中可正常运行以下代码获取API令牌:
library(httr) library(jsonlite) r <- POST("https://XXXXXXX.com/authservice/connect/token", config = list(), body = list( grant_type = "password", username = "testco", client_id = "ClientIDname", client_secret = "Clientpassword", scope = "xxxGroup" ), encode = "form" ) warn_for_status(r) status_code(r) tok <- content(r)$access_token
将相同代码迁移至R Shiny中运行时,出现如下报错:Error in UseMethod: no applicable method for 'content' applied to an object of class "response"
经确认响应对象r中确实存在目标令牌,但无法通过content(r)$access_token提取。
补充验证测试
普通R环境中运行以下代码可正常返回结果:
library("httr") library("rjson") api.url <- "http://api.tvmaze.com/lookup/shows?imdb=tt1325113" r <- GET(api.url) content(r)
同款代码在R Shiny中运行出现同类报错:
library(shiny) library("httr") library("rjson") ui <- fluidPage( ) server <- function(input, output, session) { api.url <- "http://api.tvmaze.com/lookup/shows?imdb=tt1325113" r <- GET(api.url) content(r) } shinyApp(ui, server)
问题根因
项目中加载NLP包后,NLP包的content()函数与httr包的content()函数产生命名空间冲突,Shiny运行时调用了错误的content()函数,导致方法匹配失败报错。
解决方案
显式指定httr包的命名空间调用函数,将content(r)替换为httr::content(r)即可正常提取响应内容。
内容的提问来源于stack exchange,提问作者Phlybo
相关产品推荐
相关产品推荐

