【问题标题】:Parsing POST body in R Rook在 Rook 中解析 POST 正文
【发布时间】:2019-06-13 18:05:15
【问题描述】:

我想使用 R Web 服务器包 Rook 获取 POST 请求正文的原始文本。

我已经注册了 R 应用:

parsePOST <- function(env) {
  request <- Rook::Request$new(env)

  body <- request$body()
  print(body)
}

R.server$add(app = parsePost, name = "reportGeneratorApp")

很遗憾,bodyRook::RhttpdInputStream。我尝试过的事情:

  1. 这仅提供第一行:
    body &lt;- request$body()$read_lines()
    结果:
    {\n

  2. 这仅提供正文的开头,而与“Content-Length”标头无关。所有其他读取行都是character(0)。此外,这些行在随机位置缺少数据。
    body &lt;- request$body()$read_lines(10)
    结果:

   [2] " \"data\": {\n   "                                                                                                                        
   [3] "evious\": [\n      2\n    ],\n    \"v"                                                                                                    
   [4] "e\": {\n        \"Differentially private me"                                                                                              
   [5] "              \"values\": [\n                44.39"                                                                                       
   [6] "an mechanismLaplace\"\n              ],\n              \"arguments\": ["                                                                  
   [7] "         },\n            \"batch\": [\n              1\n            ]\n          }\n    "                                                 
   [8] "\n            ]\n          }\n        }\n      },\n      \"educ_income\": {\n        \"ols\": {\n          \"ols0\": {\n            \"rel"
   [9] ""                                                                                                                                         
  [10] ""                                                                                                                                         

POST 请求由邮递员发送,标头为Content-Type: application/json

我很惊讶地发现检索请求正文如此困难。

【问题讨论】:

  • 如果没有可重复的例子,很难帮助解决这个问题。

标签: r post r-rook-package


【解决方案1】:

我能够使用以下内容将正文提取为字符串:

writeLines(paste0(rawToChar(request$body()$read(), multiple = T), collapse=""))

read() 方法返回字节,我将每个字节解析成一个字符向量,然后折叠该字符向量。如果有人有更简单或更干净的方法来做到这一点,请分享。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多