2013-04-04 134 views
9

如何在rails上使用ruby curl?像這樣的在Ruby on Rails上捲曲

curl -d 'params1[name]=name&params2[email]' 'http://mydomain.com/file.json' 
+0

你有特殊的要求使用cUrl,因爲我認爲你可以使用Ruby的HTTP post方法 – sameera207 2013-04-04 06:55:44

+0

http://stackoverflow.com/questions/3810650/help-me-converting-this-curl-toa-a- post-method-in-rails – 2013-04-04 07:02:08

+1

檢查這個http://stackoverflow.com/questions/11269224/ruby-https-post-with-headers – sameera207 2013-04-04 07:02:47

回答

22

以防萬一你不知道,它需要 '網/ HTTP'

require 'net/http' 

uri = URI.parse("http://example.org") 

# Shortcut 
#response = Net::HTTP.post_form(uri, {"user[name]" => "testusername", "user[email]" => "[email protected]"}) 

# Full control 
http = Net::HTTP.new(uri.host, uri.port) 

request = Net::HTTP::Post.new(uri.request_uri) 
request.set_form_data({"user[name]" => "testusername", "user[email]" => "[email protected]"}) 

response = http.request(request) 
render :json => response.body 

希望這會幫助別人.. :)

0

的你正在嘗試做的最基本的例子是與反引號這樣

`curl -d 'params1[name]=name&params2[email]' 'http://mydomain.com/file.json'` 

執行此然而,這會返回一個字符串,你將不得不如果你解析想知道關於服務器回覆的任何信息。

根據你的情況,我建議使用法拉第。 https://github.com/lostisland/faraday

該網站上的例子很簡單。安裝寶石,需要它,做這樣的事情:

conn = Faraday.new(:url => 'http://mydomain.com') do |faraday| 
    faraday.request :url_encoded    # form-encode POST params 
    faraday.response :logger     # log requests to STDOUT 
    faraday.adapter Faraday.default_adapter # make requests with Net::HTTP 
end 

conn.post '/file.json', { :params1 => {:name => 'name'}, :params2 => {:email => nil} } 

的後身體會自動變成一個URL編碼形式的字符串。 但是你也可以發佈一個字符串。

conn.post '/file.json', 'params1[name]=name&params2[email]' 
+0

未初始化的常量TestController :: Faraday 我成功安裝了gem ..問題出在哪裏? – Lian 2013-04-04 07:37:19

+0

您是否將Gem添加到Gemfile中?然後運行'bundle install',通常那些常量錯誤的孩子意味着它沒有被加載。 – stuartc 2013-04-04 08:31:29

+0

是的,我完成了。 – Lian 2013-04-04 08:48:18

0

這裏是一個捲曲紅寶石的淨/ HTTP轉換器:https://jhawthorn.github.io/curl-to-ruby/

例如,curl -v www.google.com命令在Ruby是等效於:

require 'net/http' 
require 'uri' 

uri = URI.parse("http://www.google.com") 
response = Net::HTTP.get_response(uri) 

# response.code 
# response.body