2010-09-28 44 views
3

我可以從我的Rails應用程序運行以下命令:Rails的捲曲語法

Hash.from_xml(%x{curl -d "admin=true" http://localhost:8888}) rescue nil 

現在我想通過一個變量 取代「管理=真正的」如果我有X =「管理=真正的」 我怎麼才能寫出上面的命令?

非常感謝

+1

請注意使用這樣的代碼。如果每個人都代表用戶進行查詢並將不可信輸入傳遞給curl,這可能會導致shell注入攻擊。這就是說,使用固定的字符串應該沒問題。 – bchurchill 2013-02-13 04:35:37

回答

0
x = %Q{"admin=true"} 
Hash.from_xml(%x{curl -d "#{x}" http://localhost:8888}) rescue nil 

%Q{}語法表示一個引用的字符串,它是一種像「超級」雙引號的字符串/「增強版」。

%x{}#{}語法稱爲插值,它允許評估一個字符串中的Ruby代碼。

+0

謝謝瑞恩,你搖滾! – pompon 2010-09-28 07:09:52

+1

我不會推薦這個:如果'admin = true'是動態生成的,你需要絕對確保這個字符串不包含任何可用於shell注入攻擊的東西[這通常很難做到]。而且,如果它不是動態生成的,那麼沒有理由使用%Q。 gertas的解決方案更強大。 – bchurchill 2013-02-13 04:37:47

4

根據命令和硬編碼參數,您可以直接在Ruby中使用curl - 當前代碼難以維護,並且不會準確告訴您發生什麼情況時可能會出現錯誤。見ruby curl

理想的選擇實際上是下降使用捲曲並使用rest-client

Hash.from_xml(RestClient.get('http://localhost:8888/', :admin=>true)) 

沒有依賴性 - 只是純粹的紅寶石。在任何情況下都會引發適當的例外。簡單的參數指定。 POST動詞可用。