Typhoeus :: Request.new(...)不起作用,但Typhoeus :: Request.get(...)确实如此!

时间:2011-02-22 14:20:28

标签: ruby-on-rails ruby http ruby-on-rails-3 plugins

我正在使用Ruby on Rails 3.我刚刚安装了Typhoeus,我正在尝试发出像这样的HTTP请求

  require 'typhoeus'

  ....
  request = Typhoeus::Request.new("http://google.com",
              :method        => :get,
              :params        => {
                :email       => "test@test.com",
                :password    => "test"
              }
            )

  resp = request.response

但是我遇到了一个问题:resp的调试始终是空白的,如果我不使用选项(方法,参数,......),也会发生这种情况。

但是,如果我使用以下代码,它将起作用:

   resp = Typhoeus::Request.get("http://google.com?email=test@test.com&password=test")

我将获得resp的值。

可能是什么问题?


我用的是什么

  • Mac OS with“Snow Leopard”v 1.1.6

  • MacPorts - 此软件已安装libcurl版本7.21.2

  • RVM(Ruby版本管理器)


P.S。:如果您需要更多信息,请告诉我。


official documentation中,对于与安装相关的Mac Os用户,有一些(已覆盖的)警报。

终端输出:

$ which ruby
/Users/<my_user_name>/.rvm/rubies/ruby-1.9.2-p136/bin/ruby

$ which curl
/opt/local/bin/curl

2 个答案:

答案 0 :(得分:4)

Typhoeus::Request.get

和它的朋友发帖,放,删除,头,补丁只是快捷方式,会立即触发请求。如果您手动创建请求,则必须在之后运行它:

request = Typhoeus::Request.new("www.example.com")
request.run
#=> <Typhoeus::Response ...>

我不建议在单一请求中使用hydra,因为这会减慢你的速度。以下是文档:http://rubydoc.info/github/typhoeus/typhoeus/Typhoeus/Request

答案 1 :(得分:2)

您需要在Hydra中运行请求:

request = Typhoeus::Request.new
hydra = Typhoeus::Hydra.new
hydra.queue(request)
hydra.run
request.response #=> "response"

我对Typhoeus进行了修补,以便它如果尚未运行就自动将Hydra中的响应排队。