我计划将 Sinatra 用于我需要为客户组装的新微型网络服务 (WS)。
WS 将只有两种方法,一种通过 GET 访问,一种通过 POST 访问。对于 POST 方法,客户端将向 sinatra WS 发送 XML 数据包,后者将解析数据并发出 200 OK HTTP 响应或 40x 错误代码。
我的问题是如何在 Sinatra 中解析传入的 POSTed XML 数据包?
这是传入数据包的示例:
<?xml version="1.0" encoding="utf-8" ?>
<Counts>
<OccupiedCount>300</OccupiedCount>
<ReservedCount>40</ReservedCount>
<VacantCount>160</VacantCount>
<TotalCount>500</TotalCount>
<Checksum>0777d5c17d4066b82ab86dff8a46af6f</Checksum>
<Timestamp>2009-11-21T14:06:19Z</Timestamp>
<ApiKey>1234567890qwerty</ApiKey>
</Counts>
有没有办法通过 Sinatra params 对象访问数据包,以便我可以用 Crack XML 之类的东西解析它?或者我是否需要使用某种 Rack 变量来获取发布到我的 WS 的整个 XML 数据包?
最佳答案
sinatra 应用程序
require 'rubygems'
require 'sinatra'
post '/form' do
puts params[:xml]
end
使用您的数据发布请求:
curl -d "xml=<?xml version="1.0" encoding="utf-8" ?>
<Counts>
<OccupiedCount>300</OccupiedCount>
<ReservedCount>40</ReservedCount>
<VacantCount>160</VacantCount>
<TotalCount>500</TotalCount>
<Checksum>0777d5c17d4066b82ab86dff8a46af6f</Checksum>
<Timestamp>2009-11-21T14:06:19Z</Timestamp>
<ApiKey>1234567890qwerty</ApiKey>
</Counts>
" http://localhost:4567/form
结果:
- - [11/Nov/2009:12:05:40 PST] "POST /form HTTP/1.1" 200 0
- -> /form
<?xml version=1.0 encoding=utf-8 ?>
<Counts>
<OccupiedCount>300</OccupiedCount>
<ReservedCount>40</ReservedCount>
<VacantCount>160</VacantCount>
<TotalCount>500</TotalCount>
<Checksum>0777d5c17d4066b82ab86dff8a46af6f</Checksum>
<Timestamp>2009-11-21T14:06:19Z</Timestamp>
<ApiKey>1234567890qwerty</ApiKey>
</Counts>
关于xml - 如何通过 Sinatra Ruby 应用程序处理 POSTed XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1717679/