17

如何在rails上的ruby上使用curl?像这个

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

3 回答 3

34

万一你不知道,它需要'net/http'

require 'net/http'

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

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

# 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]" => "testemail@yahoo.com"})

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

希望它会帮助别人.. :)

于 2013-04-05T05:44:35.253 回答
8

这是 ruby​​ 的 net/http 转换器的 curl: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
于 2017-07-26T21:48:40.850 回答
0

您尝试做的最基本示例是使用这样的反引号执行此操作

`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]'
于 2013-04-04T07:17:18.837 回答