將從瀏覽器接收到的HTTP POST字符串轉換爲Ruby哈希值的最佳庫是什麼?我不想使用大的基於軌道的庫。我正在使用eventmachine
和evma_httpserver
,並且希望包含可能解碼並轉換params字符串的最輕庫。將POST參數轉換爲Ruby中沒有導軌的哈希值
注:我不需要Web服務器。我手頭有編碼後的字符串,只需要將其轉換爲散列。
將從瀏覽器接收到的HTTP POST字符串轉換爲Ruby哈希值的最佳庫是什麼?我不想使用大的基於軌道的庫。我正在使用eventmachine
和evma_httpserver
,並且希望包含可能解碼並轉換params字符串的最輕庫。將POST參數轉換爲Ruby中沒有導軌的哈希值
注:我不需要Web服務器。我手頭有編碼後的字符串,只需要將其轉換爲散列。
URI.decode_www_form
從Ruby的標準庫可以這樣做:http://rubydoc.info/docs/ruby-stdlib/1.9.2/URI#decode_www_form-class_method
由於寫了這個,我實際上在URI.decode_www_form中發現了一個bug:使用正確的查詢字符串,你可以觸發一個表面上無限循環:`URI.decode_www_form('a = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&b 「)`。看起來好像有一個非常糟糕的正則表達式,它會回溯指數次數(嘗試減少示例中A的數量,最終你會得到答案)。 – Theo 2010-11-29 13:14:52
您可以使用rack
gem作爲其Rack::Utils.parse_query
方法。
如果您想要比這個更輕,您可以將源代碼複製到parse_query
和unescape
方法。
如果您希望事件較輕(但可能不如性能或強大),只需執行您自己的拆分並依靠CGI.unescape
即可。
試試這個:
require "uri"
result = URI.decode_www_form("your=post¶ms=values").inject({}) {|r, (key,value)| r[key.to_sym] = value;r}
puts result[:your]
puts result[:params]
架? http://rack.github.com/ – Jeremy 2010-11-28 04:10:12