3

我正计划将 Sinatra 用于一个新的微型 Web 服务 (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 参数对象访问数据包,以便我可以用 Crack XML 之类的东西解析它?或者我是否需要使用某种 Rack 变量来获取发布到我的 WS 的整个 XML 数据包?

4

1 回答 1

0

西纳特拉应用

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>
于 2009-11-11T20:09:22.527 回答