web-dev-qa-db-ja.com

Ruby on Rails

Ruby Railsで)カールを使用する方法?このように

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

念のため、「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

それが他の人を助けることを願って.. :)

24
Lian

Rubyのnet/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

あなたがやろうとしていることの最も基本的な例は、このようなバックティックでこれを実行することです

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

ただし、これは文字列を返します。サーバーからの応答について何か知りたい場合は、解析する必要があります。

状況に応じて、ファラデーの使用をお勧めします。 https://github.com/lostisland/faraday

このサイトの例は単純明快です。 gemをインストールして必要とし、次のようにします。

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
stuartc