2011-10-18 69 views
2

我有一个非常简单的应用程序西纳特拉只做注销的动作PARAMS,然后我用卷曲以XML格式发送POST数据,但西纳特拉没有获得XML解析:如何在Sinatra中获取xml post请求参数?

echo '<something>tyrael tong</something>' | curl -X POST -H 'Content-Type: text/xml' -d @- http://localhost:9528/status/update 

我通过谷歌搜索没有解决这个问题。我是否想自己解析xml文章数据?

回答

1

是,内容类型仅仅是一个服务器如何处理它的提示。如果你的服务器可以接收XML或JSON,内容类型可以告诉你如何解析它。

+0

是的,但是,作为一个Web应用程序框架,如Rails的,平时帮您解析这些数据,并把它变成“PARAMS”自动。我知道Sinatra比Rails更轻量,但要确保我没有重复其他人的努力。 –

0

由于您的帖子消息的主体是一个XML它不会被任何导轨/西纳特拉进行解析。如果要解析完成,则需要更改要发送的数据的格式,并将内容类型设置为“application/x-www-form-urlencoded”。然后Sinatra将解析这些数据并将其放入params哈希中。

+1

然后这是非常奇怪的,我有一个Rails的设置和使用相同的代码,“logger.info PARAMS”会出来把解析的哈希值。这在Rails 3.0和3.1上都会发生。 –

+0

你是对的Rails是内容类型正确设置的XML将被解析成一个哈希。 –

+0

Rails很大且“功能全面”/“臃肿”。 Sinatra很小,“轻量级”/“缺乏”。用它来做什么。 – Phrogz

2

试试这个代码 要求“的plist”

post 'some/route' 
content_type :xml 
value=Plist::parse_xml(request.body) 
end 
2

查找机架解析器:https://github.com/achiu/rack-parser这可以做我想做的工作:解析后体内转化为参数。

P.S.而且需要设置内容类型为“application/xml”的

+1

Rails使用中间件使用ActionDispatch :: ParamsParser来执行此解析。如果你喜欢,你也可以使用它。它是actionpack宝石的一部分。 –