Ruby:Net :: HTTP.start问题

时间:2011-06-27 15:28:44

标签: ruby http networking net-library

我已经得到了这个代码(大致):

parsed_url = URI.parse(url_string)
puts "before Net::HTTP.start block"
response = Net::HTTP.start(parsed_url.host, parsed_url.port) { |http|
  puts "inside Net::HTTP.start block"
  http.read_timeout = 10
  http.get(parsed_url.path)
}

当我针对在浏览器中超时的网址执行代码时,它永远不会进入阻止。任何其他情况它完美地运作。在start方法中是否有一些我没有看到的行为?我假设在http.get(parsed_url.path)语句之前根本不会打开连接所以我很困惑为什么这个代码不会执行...

提前感谢...

2 个答案:

答案 0 :(得分:1)

Net:HTTP.start调用do_start然后调用connect(两者都是私有方法):

http://apidock.com/ruby/Net/HTTP/connect

前3行是

D "opening connection to #{conn_address()}..."
s = timeout(@open_timeout) { TCPSocket.open(conn_address(), conn_port()) }
D "opened"

虽然我似乎找不到timeout方法的文档,但这可能是你的罪魁祸首。

答案 1 :(得分:1)

Net::HTTP class的文档读取

  

打开TCP连接和HTTP会话。

因此,当您致电Net::HTTP.start时,会建立连接,如果您无法访问指定的网址,则会在Timeout::Error方法中抛出start,并且您网内的代码为确实从未执行过。