Sinatra中如何读取HTTParty发送的数据

How to read data sent by HTTParty in Sinatra

我正在尝试让两个单独的 Ruby 程序进行通信,一个使用 Sinatra gem,另一个使用 HTTParty gem。我试图做的是 post 从其他程序中的 HTTP post 请求到 Sinatra 程序的数据。

这是发送数据的代码。

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

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

编辑

我在另一端的代码目前确实没有什么特别的,但我会把我一直在尝试的。

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

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

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

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

如果你看一下 sinatra README 它说

It is recommended to also run gem install thin, which Sinatra will pick up if available.

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

post 数据在 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 的数据。如果您想 POST 另一种类型(例如 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"})