通过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&param2=val2 

但如果我不是调用同一个URL中使用卷曲,没什么发生(除了HTML为闪亮应用返回):

curl -X GET http://127.0.0.1:8000/\?param1=val1\&param2=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部分。

+0

这是一个好点 - 也许整个设计理念从一开始就是错误的。但是,核心问题仍然存在:是否可以使用Shiny以类似于通用RESTful API的方式构建工作Web API,可通过通用GET访问? – LCHansson 2015-01-04 15:46:29

+2

@LCHansson是的,我认为使用Shiny的想法是错误的。没有JavaScript和WebSockets,闪亮可能没有用处。我建议你从Shiny的依赖项开始,改为[httpuv](http://cran.rstudio.com/package=httpuv)。 – 2015-01-04 19:43:23

+0

@易辉,对于迟到的答案感到抱歉。您的评论正是我所期待的那种指针。如果你愿意将评论转换为答案,我很乐意将其标记为解决方案。谢谢! – LCHansson 2015-01-11 17:51:44