【问题标题】:How to read data sent by HTTParty in Sinatra如何在 Sinatra 中读取 HTTParty 发送的数据
【发布时间】:2019-03-06 13:04:07
【问题描述】:

我正在尝试让两个单独的 Ruby 程序进行通信,一个与 Sinatra gem,另一个与 HTTParty gem。我正在尝试做的是从另一个程序中的 HTTP 发布请求将数据发布到 Sinatra 程序。

这是发送数据的代码。

HTTParty.post('https://notgivingawaymydomain/post_data', {something: foo})

但是,我不知道如何在另一端接收数据。我尝试了一些我在互联网上研究过的东西,但似乎都没有。

编辑

我在另一端的代码目前真的没有什么特别的,但我会放上我一直在尝试的东西。

post '/post_data' do 
   #not sure how to access the hash that my post request sent here
end

【问题讨论】:

  • “我已经尝试了一些事情” – 显示您的代码(另一端的代码),这样我们就知道出了什么问题。您可能不希望将 Sinatra 教程作为答案 :-)
  • 已编辑。谢谢你的提示。 :) 我是新来的。

标签: ruby sinatra


【解决方案1】:

帖子数据在您的 Sinatra 路由内的 params 对象中可用:

post '/post_data' do 
  data = params["something"] # => my_value is now 'foo' in this example
  #... rest of code
end

Sinatra 仅解析application/x-www-form-urlencoded(在本例中为)或multipart/form-data 的数据。如果您想发布另一种类型(例如 JSON),您需要自己使用 request.body 解析请求正文:

post '/json_data'
  # request.body is an IO object
  data = JSON.parse(request.body.read)
end

确保您的HTTParty 调用的语法正确。您需要指定选项的body: 键:

HTTParty.post('http://localhost:4567/post_data', body: {something: "foo"})

【讨论】:

  • 非常感谢。我错过了body: 键。 :)
【解决方案2】:

如果你想通过 HTTP 发布数据,你需要在接收端有一个网络服务器。

sinatra 将自己描述为Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort

所以它本身不是网络服务器,但它可以通过网络服务器运行以处理您通过 HTTP 发布的数据。它与网络服务器捆绑在一起,因此您可以立即启动它。

如果你看一下 sinatra README 它会说

建议同时运行 gem install thin,如果可用,Sinatra 会选择它。

thin 是一个可靠的网络服务器,推荐用于运行 sinatra 网络应用程序。

【讨论】:

  • 我确实在另一端有一个网络服务器,我只是不确定如何访问传递的哈希。不过,谢谢您的回复。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 2013-04-16
  • 1970-01-01
  • 2013-07-18
  • 2015-05-06
  • 1970-01-01
相关资源
最近更新 更多