【问题标题】:Plumber does not find request body管道工找不到请求正文
【发布时间】:2021-06-23 20:21:26
【问题描述】:

我目前正在 Heroku 服务器上编写一个 webhook,由于某种原因,我很难获取存储在请求正文中的值,因为它似乎总是显示为 NULL。我的 app.R 脚本看起来像指南中的所有内容:

#app.R
library(plumber)
library(tidyverse)

port <- Sys.getenv('PORT')

pr <- plumb("plumber.R")

pr$run(
  host = '0.0.0.0',
  port = as.numeric(port)
)

我的管道工.R 文件是这样开始的。

library(plumber)
library(tidyverse)
#* Log some information about the incoming request
#* @filter logger
function(req){
  print('LOGGER')
  print( req)
  cat(as.character(Sys.time()), "-",
      req$REQUEST_METHOD, req$PATH_INFO, "-",
      req$HTTP_USER_AGENT, "@", req$REMOTE_ADDR, "\n")
  plumber::forward()
}

#* @filter bodyExists?
function(req, res){
  print( 'BODY FILTER')
  print( req$body)
  if (is.null(req$body)){
    res$status <- 404 
    return(list(error="Body not found"))
  } else {
    plumber::forward()
  }
}

每次收到请求时,控制台都会显示:

因为没有身体而停止。我尝试从多个来源发送请求,我知道正在发送请求的主体,但由于某种原因,管道工在到达我的 api 时找不到它。我一直在关注使用https://github.com/virtualstaticvoid/heroku-plumber-app 作为模板,我看不出我在做什么与他们不同。

【问题讨论】:

  • 您发送什么类型的请求以及如何发送它们?你期望身体里有什么? S 简单的 GET 请求将不包含正文。
  • 它应该接收来自Fulcrum的POST请求,Fulcrum就像一个数据收集公司。当我使用 node.js 与他们一起构建 webhook 时,我从来没有遇到过问题。通常,有效负载看起来像大型 JSON 对象,例如: { id: "8faf0917-1987-4ac6-bcc7-4fbf71d191f3", type: "record.create", owner_id: "00053caf-4b6e-4c86-88b6-64695895dffe", data: {...} } @MrFlick
  • 如果没有适当的可重现示例,很难猜测发生了什么。 JSON 数据是否与适当的内容类型标头一起发送? req$req$body 是否包含任何内容?
  • req$req$body == NULL。有没有办法查看传入的请求?当我print(req) 它返回&lt;environment: 0x561711d66020&gt; 这是没用的。我也不完全确定这意味着什么
  • 对不起。那是一个错字。我的意思是req$bodyRaw。要查看该环境中的内容,您可以运行 ls.str(env=req)

标签: r api heroku webhooks plumber


【解决方案1】:

应该使用req$postBody 而不是req$body

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2016-05-10
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    相关资源
    最近更新 更多