【发布时间】:2018-02-17 23:47:16
【问题描述】:
使用https://requestb.in,我可以看到 webhook 正确地发送了 header + json body 数据。但是当我将 json 请求发送到我的服务器时,解析 json 时出现错误。
我的控制器(无法接收身体数据):
class ReceiverController < ApplicationController
skip_before_filter :verify_authenticity_token
def handle_post
puts request.headers['Content-Type']
puts "request:"
puts JSON.parse(request.raw_post)
puts "request2:"
puts JSON.parse(request.body.read)
end
end
错误输出:
application/json; charset=utf-8
request:
JSON::ParserError (A JSON text must at least contain two octets!):
app/controllers/receiver_controller.rb:69:in `handle_post'
request2:
Completed 500 Internal Server Error in 7ms (ActiveRecord: 0.0ms)
Routes.rb
post "/receive" => 'receiver#handle_post'
【问题讨论】:
-
puts request.body.read的输出? -
我认为这个问题需要更多信息来通过提供 MCV 示例 (stackoverflow.com/help/mcve) 来帮助回答: 1) 您能否添加一个示例来说明您是如何提出请求的? 2) ApplicationController 是什么样的? 3)您使用的是哪个版本的 Rails(看起来可能是旧版本)?
-
你能发布
request的输出吗? -
正如许多 cmets 指出的那样,请求没有通过。事实证明,接收器 url(托管在 heroku 上)需要是 https(安全),否则请求将被拒绝。如果请求返回 nil,其他有类似问题的人应该仔细检查他们的路由/url。
-
感谢@Taylor 发布解决方案。但是,如果您能抽出时间用解决方案编写答案(并接受它)而不是将解决方案隐藏在 cmets 中(只有在单击展开后才可见),那将是一件好事。
标签: ruby-on-rails ruby webhooks