我想發送一個xml
字符串到我的Rook
Web服務器。但是,當我使用Rook::Request
類的POST
方法來解析請求的有效負載時,它將內容放入返回列表的名稱中。相應的列表值是NA
。我使用包的postForm
和postfields
選項來創建我的請求。下面更詳細的例子如下:Rook webserver將postfields的內容解析爲列表名稱
將這個到文件webserver.R
library(Rook)
s <- Rhttpd$new()
#set up web server app
s$add(
name="xml_example",
app=function(env) {
req <- Request$new(env)
#parse POST request
tmp=req$POST()
#create response
res <- Rook::Response$new()
#use dput and capture.output to return text of tmp
res$write(capture.output(dput(tmp)))
res$finish()
}
)
#start web server on port 9000
s$start(port=9000)
#we will start the web server via Rscript and NOT via RStudio
Sys.sleep(.Machine$integer.max)
可以通過RStudio執行以下(Windows用戶可能需要更改一些命令)
library(RCurl)
#start web server outside of RStudio! Do not forget to kill it later
system("Rscript webserver.R &")
#send POST request
postForm("http://127.0.0.1:9000/custom/xml_example",
.opts=list(postfields="<request>test</request>",
httpheader=c("content-type"="application/xml")))
這返回
#[1] "structure(list(`<request>test</request>` = NA),
# .Names = \"<request>test</request>\")"
正如你所看到的,xml
字符串被放入列表名稱中。不完全是我期待的。除了提取列表名稱以獲得xml
,這怎麼能正確完成呢?我是否需要在Rook
或RCurl
中設置選項?
順便說一句:
#do not forget to kill the webserver
system("ps aux|grep webserver.R")
#system("kill yourPIDhere")