Ruby: Net::HTTP.start issue



我有这段代码(大致(:

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)
}

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

提前感谢...

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方法的文档,但这可能是您的罪魁祸首。

Net::HTTP 类的文档如下:

打开 TCP 连接和 HTTP 会话。

因此,当您调用 Net::HTTP.start 时,将建立连接,如果您无法访问给定的 URL,则会在 start 方法中抛出一个Timeout::Error,并且块中的代码确实永远不会执行。

最新更新