0

xml文字列をRookWeb サーバーに送信したいと考えています。しかし、クラスのPOSTメソッドを使用してリクエストのペイロードを解析すると、返されたリストの名前にコンテンツが挿入されます。対応するリスト値は. パッケージのオプションを使用してリクエストを作成します。より詳細な例を以下に示します。Rook::RequestPOSTNApostFormpostfieldsRCurl

これをファイルに入れます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これを適切に行うにはどうすればよいですか? またはでオプションを設定する必要がありますRookRCurl?

ところで:

#do not forget to kill the webserver
system("ps aux|grep webserver.R")
#system("kill yourPIDhere")
4

1 に答える 1

0

内の解析エラー/機能であることが判明しましたRook。投稿リクエストを例に取ります

postForm("http://127.0.0.1:9000/custom/xml_example",
         .opts=list(postfields="xml=<request>test</request>",
                    httpheader=c("content-type"="application/xml")))

これにより結果が得られます

#[1] "structure(list(xml = \"<request>test</request>\"), .Names = \"xml\")"

ご覧のとおり、Rookパーサーは入力のある種のkey=value構造を想定しています。記号xmlを使用する名前空間定義を含めることができるため、これは s にとって問題です(バージョンを定義するときや、おそらく他の場合にも)。=xml

とにかく、Rookハックによってのみリモートマシンにアクセスできるようにすることができるので、私は背を向けました(http://jeffreyhorner.tumblr.com/post/33814488298/deploy-rook-apps-part-iiを参照)。このハック、ところで、私にはうまくいきません。私はplumber今パッケージを使用しています - 魅力のように動作します! ( https://github.com/trestletech/plumber )

于 2016-03-06T18:06:47.687 に答える