如何让Ruby的Net :: HTTP模块取消请求?如何取消Ruby Net :: HTTP请求?
以下对http.finish
的调用引发错误。我得到这样的印象,即响应对象不知道连接已关闭,仍然需要更多数据。
我想避免发出HEAD请求。因此,请发出GET请求,除非内容类型为HTML,否则取消请求。
Net::HTTP.start(uri.host, uri.port) do |http|
http.request_get(uri.path) do |response|
unless response['content-type'] =~ /html/i
http.finish
end
end
end
/usr/lib/ruby/1.8/net/http.rb:2241:in `stream_check': attempt to read body out of block (IOError)
from /usr/lib/ruby/1.8/net/http.rb:2171:in `read_body'
from /usr/lib/ruby/1.8/net/http.rb:2198:in `body'
from /usr/lib/ruby/1.8/net/http.rb:2137:in `reading_body'
from /usr/lib/ruby/1.8/net/http.rb:1052:in `request'
from /usr/lib/ruby/1.8/net/http.rb:948:in `request_get'
from net.rb:9
from /usr/lib/ruby/1.8/net/http.rb:543:in `start'
from /usr/lib/ruby/1.8/net/http.rb:440:in `start'
from net.rb:7
没错,但我想强制关闭连接。除非内容类型符合预期,否则我不想完成请求。我也想避免在每个url上运行一个.head请求。所以,.get,如果html继续,否则关闭连接。 – Alexandre 2010-02-01 21:50:01
这就是我想要避免的。我想通知http客户端,我不想继续阅读响应主体。 – Alexandre 2010-02-01 21:57:59
除非您调用response.read_body,否则它不应该完成请求。如果你不打算使用它,你应该消除头呼。 – klochner 2010-02-01 21:59:12