我可以從我的Rails應用程序運行以下命令:Rails的捲曲語法
Hash.from_xml(%x{curl -d "admin=true" http://localhost:8888}) rescue nil
現在我想通過一個變量 取代「管理=真正的」如果我有X =「管理=真正的」 我怎麼才能寫出上面的命令?
非常感謝
我可以從我的Rails應用程序運行以下命令:Rails的捲曲語法
Hash.from_xml(%x{curl -d "admin=true" http://localhost:8888}) rescue nil
現在我想通過一個變量 取代「管理=真正的」如果我有X =「管理=真正的」 我怎麼才能寫出上面的命令?
非常感謝
x = %Q{"admin=true"}
Hash.from_xml(%x{curl -d "#{x}" http://localhost:8888}) rescue nil
的%Q{}
語法表示一個引用的字符串,它是一種像「超級」雙引號的字符串/「增強版」。
內%x{}
的#{}
語法稱爲插值,它允許評估一個字符串中的Ruby代碼。
謝謝瑞恩,你搖滾! – pompon 2010-09-28 07:09:52
我不會推薦這個:如果'admin = true'是動態生成的,你需要絕對確保這個字符串不包含任何可用於shell注入攻擊的東西[這通常很難做到]。而且,如果它不是動態生成的,那麼沒有理由使用%Q。 gertas的解決方案更強大。 – bchurchill 2013-02-13 04:37:47
根據命令和硬編碼參數,您可以直接在Ruby中使用curl - 當前代碼難以維護,並且不會準確告訴您發生什麼情況時可能會出現錯誤。見ruby curl。
理想的選擇實際上是下降使用捲曲並使用rest-client。
Hash.from_xml(RestClient.get('http://localhost:8888/', :admin=>true))
沒有依賴性 - 只是純粹的紅寶石。在任何情況下都會引發適當的例外。簡單的參數指定。 POST動詞可用。
請注意使用這樣的代碼。如果每個人都代表用戶進行查詢並將不可信輸入傳遞給curl,這可能會導致shell注入攻擊。這就是說,使用固定的字符串應該沒問題。 – bchurchill 2013-02-13 04:35:37