Sha256: 02972eef2f58130ca0f1c33e82a87c9d0c2e73ae70f20815d7856c4b14852082
Contents?: true
Size: 1.39 KB
Versions: 1
Compression:
Stored size: 1.39 KB
Contents
require 'uri' require 'net/http' module Dimscan # A utility class for enumerating over the bytes of a http response body class HTTPByteEnumerator @connections = {} class << self def open_connection(host, port, ssl) @connections[host] ||= {} @connections[host][port] ||= {} @connections[host][port][ssl] ||= Net::HTTP.start( host, port, use_ssl: ssl ) end def close_connections @connections.values.each do |ports| ports.values.each do |connections| connections.values.each(&:finish) end end end end def initialize(url) @uri = URI(url) fail ArgumentError, 'invalid scheme' unless @uri.scheme =~ /^https?$/ end def each(&block) return to_enum(__callee__) unless block_given? request = Net::HTTP::Get.new(@uri) http = self.class.open_connection( @uri.host, @uri.port, @uri.scheme == 'https' ) http.request(request) do |response| fail response.body if error?(response) enumerate_response(response, &block) end end protected def error?(response) [Net::HTTPError, Net::HTTPClientError].any? do |error| response.is_a?(error) end end def enumerate_response(response, &block) response.read_body do |chunk| chunk.each_byte(&block) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dimscan-0.2.0 | lib/dimscan/http_byte_enumerator.rb |