我正在尝试使用两个单独的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
答案 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应用程序。