2013-04-04 48 views
9

cách sử dụng curl trên ruby ​​trên đường ray? Như thế này mộtCuộn tròn trên Ruby on Rails

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

do u có một yêu cầu đặc biệt để sử dụng cUrl, coz tôi nghĩ rằng bạn có thể sử dụng phương pháp bài đăng HTTP ruby ​​ – sameera207

+0

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

+1

kiểm tra http://stackoverflow.com/questions/11269224/ruby-https-post-with-headers – sameera207

Trả lời

22

Chỉ trong trường hợp bạn không biết, nó đòi hỏi '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 

Hy vọng nó sẽ giúp những người khác .. :)

0

Ví dụ cơ bản nhất về những gì bạn đang cố gắng làm là để thực hiện điều này với backticks như thế này

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

Tuy nhiên này trả về một chuỗi, mà bạn sẽ phải phân tích nếu bạn muốn biết bất cứ điều gì về câu trả lời từ máy chủ.

Tùy thuộc vào tình huống của bạn, tôi khuyên bạn nên sử dụng Faraday. https://github.com/lostisland/faraday

Các ví dụ trên trang web là thẳng về phía trước. Cài đặt đá quý, yêu cầu nó và làm một cái gì đó như thế này:

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

Thân bài sẽ tự động được chuyển thành chuỗi biểu mẫu được mã hóa url. Nhưng bạn cũng có thể đăng một chuỗi.

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

hằng số không xác định TestController :: Faraday Tôi đã cài đặt thành công gem .. vấn đề là gì? – Lian

+0

Bạn đã thêm Gem vào Gemfile chưa? và sau đó chạy 'bundle install', thường là những lỗi liên tục xảy ra có nghĩa là nó chưa được tải. – stuartc

+0

Có, tôi đã thông qua điều đó. – Lian

0

Đây là một curl để của ruby chuyển đổi net/http: https://jhawthorn.github.io/curl-to-ruby/

Ví dụ, một lệnh curl -v www.google.com là tương đương trong Ruby:

require 'net/http' 
require 'uri' 

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

# response.code 
# response.body