我有一个非常简单的Ruby Rack服务器,例如:

app = Proc.new do |env|
  req = Rack::Request.new(env).params
  p req.inspect
  [200, { 'Content-Type' => 'text/plain' }, ['Some body']]
end

Rack::Handler::Thin.run(app, :Port => 4001, :threaded => true)

每当我将带有JSON对象的POST HTTP请求发送到服务器时:
{ "session": {
"accountId": String,
"callId": String,
"from": Object,
"headers": Object,
"id": String,
"initialText": String,
"parameters": Object,
"timestamp": String,
"to": Object,
"userType": String } }

我什么也没收到。我可以检测到收到的请求,但无法获取数据。在我的控制台上,puts req.inspect的结果类似于:
"{}"

我应该如何获取数据?

我试图用类似的东西来改变它:
request  = Rack::Request.new env
object   = JSON.parse request.body
puts JSON.pretty_generate(object)

但是我收到以下警告:
!! Unexpected error while processing request: can't convert StringIO into String

最佳答案

env['rack.input'].gets

这对我有用。我发现使用curl或wget针对Rack(v1.4.1)服务器测试POST请求需要使用此代码作为获取请求正文的后备。狂放的POST请求(例如GitHub WebHooks)没有同样的问题。

关于ruby-on-rails - 如何使用Rack接收JSON对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9707034/

10-13 05:41