2013-04-04 17 views
9

come usare il ricciolo su rubino su rotaie? Come questoCurl on Ruby on Rails

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

hai un requirment speciale per usare cUrl, coz penso che potresti usare il metodo ruby ​​HTTP post – sameera207

+0

http://stackoverflow.com/questions/3810650/help-me-conversing-this-curl-to-a- post-metodo-in-rotaie –

+1

controlla questo http://stackoverflow.com/questions/11269224/ruby-https-post-with-headers – sameera207

risposta

22

Solo nel caso non si sa, richiede 'net/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 

Spero che sarà aiuta gli altri .. :)

0

L'esempio più semplice di quello che si sta cercando di fare è di eseguire questo con apici inversi come questo

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

Tuttavia, questo restituisce una stringa, che si dovrà analizzare se volevo sapere qualcosa sulla risposta dal server.

A seconda della situazione, consigliamo di utilizzare Faraday. https://github.com/lostisland/faraday

Gli esempi sul sito sono semplici. Installare la gemma, lo richiedono, e fare qualcosa di simile:

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} } 

Il corpo post verrà automaticamente essere trasformato in una stringa codificata forma di URL. Ma puoi anche inserire una stringa.

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

costante non inizializzata TestController :: Faraday I installa con successo la gemma .. qual è il problema? – Lian

+0

Hai aggiunto la gemma al Gemfile? e quindi esegui 'bundle install', di solito quei file di errori costanti indicano che non è stato caricato. – stuartc

+0

Sì, ho finito. – Lian

0

Ecco un ricciolo di Ruby convertitore net/http: https://jhawthorn.github.io/curl-to-ruby/

ad esempio, un comando curl -v www.google.com è equivalente in rubino a:

require 'net/http' 
require 'uri' 

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

# response.code 
# response.body