通过HTTP GET(例如cURL)调用Shiny应用程序执行代码
问题描述:
我正在构建一个R/Shiny应用程序,该应用程序在通过HTTP GET调用时应执行一些代码,这与第一个回答为this question非常相似。现在,当我通过网络浏览器查看应用程序时,该应用程序运行良好,但我想要的是真正能够在网络浏览器外部远程调用应用程序,例如,通过来自cURL或服务器端javascript的HTTP GET调用,并使用URL参数作为输入来执行代码。通过HTTP GET(例如cURL)调用Shiny应用程序执行代码
如果我请访问以下网址在我的网页浏览器(假设闪亮的应用程序是在本地主机上运行),一切都工作得很好:
http://127.0.0.1:8000/?param1=val1¶m2=val2
但如果我不是调用同一个URL中使用卷曲,没什么发生(除了HTML为闪亮应用返回):
curl -X GET http://127.0.0.1:8000/\?param1=val1\¶m2=val2
我的应用程序被基本上构建为当在所述第一答案(由用户@jdharrison)上面链接的问题的示例的应用的扩展,它仅还执行一些专门服务器端的代码(即, .E。对用户不可见并且不在前端返回),因此应该足以作为代码示例:
library(shiny)
runApp(list(
ui = bootstrapPage(
textOutput('text')
),
server = function(input, output, session) {
output$text <- renderText({
query <- parseQueryString(session$clientData$url_search)
paste(names(query), query, sep = "=", collapse=", ")
})
}
), port = 5678, launch.browser = FALSE)
非常感谢提前!
答
如果生成的HTML包含Javascript,在浏览器中的执行将与Curl中的执行有很大不同,因为后者不会执行Javascript部分。
这是一个好点 - 也许整个设计理念从一开始就是错误的。但是,核心问题仍然存在:是否可以使用Shiny以类似于通用RESTful API的方式构建工作Web API,可通过通用GET访问? – LCHansson 2015-01-04 15:46:29
@LCHansson是的,我认为使用Shiny的想法是错误的。没有JavaScript和WebSockets,闪亮可能没有用处。我建议你从Shiny的依赖项开始,改为[httpuv](http://cran.rstudio.com/package=httpuv)。 – 2015-01-04 19:43:23
@易辉,对于迟到的答案感到抱歉。您的评论正是我所期待的那种指针。如果你愿意将评论转换为答案,我很乐意将其标记为解决方案。谢谢! – LCHansson 2015-01-11 17:51:44