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

时间:2019-03-06 13:04:07

标签: ruby sinatra

我正在尝试使用两个单独的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

2 个答案:

答案 0 :(得分: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"})

答案 1 :(得分:0)

如果要通过HTTP发布数据,则在接收端需要一个Web服务器。

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

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

如果您看sinatra README会说

  

建议也运行gem install Thin,如果可用,则Sinatra会自动安装。

thin是一种可靠的Web服务器,建议运行sinatra Web应用程序。