2011-10-18 54 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寶石的一部分。 –