X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=lib%2Frbot%2Fcore%2Futils%2Fhttputil.rb;h=4ea83104ccc51a4d86a1cff0f89afd2995893725;hb=be5d914984e767ce1a718b84d0bad1c88d9f8ea3;hp=ae16416d4e15dc52228d5a4509833b7ab574fea5;hpb=61a22b729532316193612eac4f948ff11aa57f50;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/lib/rbot/core/utils/httputil.rb b/lib/rbot/core/utils/httputil.rb index ae16416d..4ea83104 100644 --- a/lib/rbot/core/utils/httputil.rb +++ b/lib/rbot/core/utils/httputil.rb @@ -99,7 +99,7 @@ module ::Net end when 'deflate' debug "inflating body" - # From http://www.koders.com/ruby/fid927B4382397E5115AC0ABE21181AB5C1CBDD5C17.aspx?s=thread: + # From http://www.koders.com/ruby/fid927B4382397E5115AC0ABE21181AB5C1CBDD5C17.aspx?s=thread: # -MAX_WBITS stops zlib from looking for a zlib header inflater = Zlib::Inflate.new(-Zlib::MAX_WBITS) begin @@ -482,6 +482,14 @@ class HttpUtil # def get_response(uri_or_s, options = {}, &block) # :yields: resp uri = uri_or_s.kind_of?(URI) ? uri_or_s : URI.parse(uri_or_s.to_s) + unless URI::HTTP === uri + if uri.scheme + raise "#{uri.scheme.inspect} URI scheme is not supported" + else + raise "don't know what to do with #{uri.to_s.inspect}" + end + end + opts = { :max_redir => @bot.config['http.max_redir'], :yield => :final, @@ -490,7 +498,6 @@ class HttpUtil }.merge(options) resp = nil - cached = nil req_class = case opts[:method].to_s.downcase.intern when :head, :"net::http::head" @@ -524,7 +531,9 @@ class HttpUtil debug "get_response(#{uri}, #{opts.inspect})" - if opts[:cache] && cached = @cache[cache_key] + cached = @cache[cache_key] + + if opts[:cache] && cached debug "got cached" if !cached.expired? debug "using cached" @@ -537,7 +546,10 @@ class HttpUtil headers['Range'] = opts[:range] if opts[:range] headers['Authorization'] = opts[:auth_head] if opts[:auth_head] - cached.setup_headers(headers) if cached && (req_class == Net::HTTP::Get) + if opts[:cache] && cached && (req_class == Net::HTTP::Get) + cached.setup_headers headers + end + req = req_class.new(uri.request_uri, headers) if uri.user && uri.password req.basic_auth(uri.user, uri.password) @@ -547,22 +559,23 @@ class HttpUtil debug "prepared request: #{req.to_hash.inspect}" begin - get_proxy(uri, opts).start do |http| - http.request(req) do |resp| - resp['x-rbot-location'] = uri.to_s - if Net::HTTPNotModified === resp - debug "not modified" - begin - cached.revalidate(resp) - rescue Exception => e - error e + get_proxy(uri, opts).start do |http| + http.request(req) do |resp| + resp['x-rbot-location'] = uri.to_s + if Net::HTTPNotModified === resp + debug "not modified" + begin + cached.revalidate(resp) + rescue Exception => e + error e + end + debug "reusing cached" + resp = cached.response + elsif Net::HTTPServerError === resp || Net::HTTPClientError === resp + debug "http error, deleting cached obj" if cached + @cache.delete(cache_key) end - debug "reusing cached" - resp = cached.response - elsif Net::HTTPServerError === resp || Net::HTTPClientError === resp - debug "http error, deleting cached obj" if cached - @cache.delete(cache_key) - elsif opts[:cache] + begin return handle_response(uri, resp, opts, &block) ensure @@ -571,11 +584,8 @@ class HttpUtil @cache[cache_key] = cached end end - return ret end - return handle_response(uri, resp, opts, &block) end - end rescue Exception => e error e raise e.message @@ -610,8 +620,8 @@ class HttpUtil opts = {:method => :head}.merge(options) begin resp = get_response(uri, opts, &block) - raise "http error #{resp}" if Net::HTTPClientError === resp || - Net::HTTPServerError == resp + # raise "http error #{resp}" if Net::HTTPClientError === resp || + # Net::HTTPServerError == resp return resp rescue Exception => e error e