2013-04-04 15 views
9

jak używać zwijania na rubinach na szynach? Jak tenZwijanie na Ruby on Rails

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

masz specjalne wymagania do korzystania z cUrl, coz Myślę, że możesz użyć metody posta HTTP ruby ​​ – sameera207

+0

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

+1

sprawdź ten http://stackoverflow.com/questions/11269224/ruby-https-post-with-headers – sameera207

Odpowiedz

22

tylko w przypadku kiedy nie wiem, to wymaga 'netto/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 

nadzieję, że to pomaga innym .. :)

0

Najprostszym przykładem tego, co próbujesz zrobić, to wykonać to z backticks jak ten

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

Jednak ta zwraca ciąg znaków, które trzeba przeanalizować, czy ciebie chciał wiedzieć cokolwiek na temat odpowiedzi z serwera.

W zależności od sytuacji polecam używanie Faradaya. https://github.com/lostisland/faraday

Przykłady na stronie są proste. Zainstalować gem, wymagają, i zrobić coś takiego:

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

Ciało poczta zostanie automatycznie przekształcony w postać url zakodowany ciąg. Ale możesz również napisać ciąg znaków.

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

niezainicjowana stała TestController :: Faraday Z powodzeniem instaluję klejnot .. na czym polega problem? – Lian

+0

Czy dodałeś Klejnot do Gemfile? a następnie uruchom 'bundle install', zwykle te kidns ciągłych błędów oznaczają, że nie zostały załadowane. – stuartc

+0

Tak, skończyłem z tym. – Lian

0

Oto curl do Ruby konwerter netto/http: https://jhawthorn.github.io/curl-to-ruby/

na przykład komenda curl -v www.google.com jest równoważne w Ruby do:

require 'net/http' 
require 'uri' 

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

# response.code 
# response.body