【发布时间】: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)它返回<environment: 0x561711d66020>这是没用的。我也不完全确定这意味着什么 -
对不起。那是一个错字。我的意思是
req$bodyRaw。要查看该环境中的内容,您可以运行ls.str(env=req)
标签: r api heroku webhooks plumber