首页 > 解决方案 > 如何在 Sinatra 中读取 HTTParty 发送的数据

问题描述

我试图让两个单独的 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

标签: rubysinatra

解决方案


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

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"})

推荐阅读