如何在Ruby 2中为Net :: HTTP :: Post.new请求指定读取超时

Jan*_*ane 18 ruby ruby-on-rails

我从ruby脚本发现了一个rails应用程序的帖子.该脚本创建一个变量请求

request = Net::HTTP::Post.new(url.path)
Run Code Online (Sandbox Code Playgroud)

然后按如下方式使用

request.content_type = "application/json"    
request.body =  JSON.generate( params )

response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)}
Run Code Online (Sandbox Code Playgroud)

在服务器端发生了很多处理,我收到了一个Net::ReadTimeout错误

我试图指定一个超时期限

request.read_timeout = 500
Run Code Online (Sandbox Code Playgroud)

根据这个stackoverflow的答案,但我有一个

undefined method `read_timeout=' for #<Net::HTTP::Post POST> (NoMethodError)
Run Code Online (Sandbox Code Playgroud)

错误.我假设我在某处遗漏了一些简单的东西.所有线索都感激不尽

技术信息:

  • Ruby 2.0.0p247
  • Rails 4.0.0
  • Windows 7 32位红宝石

Jan*_*ane 32

解决了这个stackoverflow的答案

我改变了我的意见

response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)}
Run Code Online (Sandbox Code Playgroud)

response = Net::HTTP.start(url.host, url.port, :read_timeout => 500) {|http| http.request(request)}
Run Code Online (Sandbox Code Playgroud)

这似乎解决了这个问题.


Pat*_*ity 30

read_timeout与一个普通的可用Net::HTTP对象:

url = URI.parse('http://google.com')

http = Net::HTTP.new(url.host, url.port)
http.read_timeout = 5 # seconds

http.request_post(url.path, JSON.generate(params)) do |response|
  # do something with response
  p response
end
Run Code Online (Sandbox Code Playgroud)

  • 注意:read_timeout以秒为单位,而不是毫秒. (2认同)