【问题标题】:Curl on Ruby on Rails在 Ruby on Rails 上卷曲
【发布时间】:2013-04-04 06:53:15
【问题描述】:

如何在 ruby​​ on rails 上使用 curl?喜欢这个

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

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3 curl ruby-on-rails-3.1


【解决方案1】:

万一你不知道,它需要'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

希望它能对其他人有所帮助.. :)

【讨论】:

    【解决方案2】:

    这是 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
    

    【讨论】:

      【解决方案3】:

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

      `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]'
      

      【讨论】:

      • 未初始化的常量 TestController::Faraday 我成功安装了 gem.. 有什么问题?
      • 您是否将 Gem 添加到 Gemfile 中?然后运行bundle install,通常那些不断错误的小子意味着它还没有被加载。
      • 是的,我已经完成了。
      • 你能发一个贴图 (pastie.org) 你把法拉第代码放在哪里吗?
      猜你喜欢
      • 2011-03-19
      • 2011-06-01
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      相关资源
      最近更新 更多