2010-11-28 48 views
3

將從瀏覽器接收到的HTTP POST字符串轉換爲Ruby哈希值的最佳庫是什麼?我不想使用大的基於軌道的庫。我正在使用eventmachineevma_httpserver,並且希望包含可能解碼並轉換params字符串的最輕庫。將POST參數轉換爲Ruby中沒有導軌的哈希值

注:我不需要Web服務器。我手頭有編碼後的字符串,只需要將其轉換爲散列。

+0

架? http://rack.github.com/ – Jeremy 2010-11-28 04:10:12

回答

7

URI.decode_www_form從Ruby的標準庫可以這樣做:http://rubydoc.info/docs/ruby-stdlib/1.9.2/URI#decode_www_form-class_method

+0

由於寫了這個,我實際上在URI.decode_www_form中發現了一個bug:使用正確的查詢字符串,你可以觸發一個表面上無限循環:`URI.decode_www_form('a = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&b 「)`。看起來好像有一個非常糟糕的正則表達式,它會回溯指數次數(嘗試減少示例中A的數量,最終你會得到答案)。 – Theo 2010-11-29 13:14:52

5

您可以使用rack gem作爲其Rack::Utils.parse_query方法。

如果您想要比這個更輕,您可以將源代碼複製到parse_queryunescape方法。

如果您希望事件較輕(但可能不如性能或強大),只需執行您自己的拆分並依靠CGI.unescape即可。

1

試試這個:

require "uri"  
result = URI.decode_www_form("your=post&params=values").inject({}) {|r, (key,value)| r[key.to_sym] = value;r} 

puts result[:your] 
puts result[:params] 
相關問題