红宝石:网:: HTTP.start问题
问题描述:
我有了这个代码(大约):红宝石:网:: HTTP.start问题
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)
}
当我执行针对浏览器timesout的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 class的文档读取
打开TCP连接和HTTP会话。
所以,当你调用Net::HTTP.start
,在建立连接,如果你不能访问给定的URL,然后Timeout::Error
抛出的start
方法内,确实永远不会执行你的块中的代码。
你在虚拟机内运行吗?什么平台? –
我是! Ubuntu客户端通过VirtualBox在win7 64位主机上运行 – jaydel