# File lib/feedzirra/feed.rb, line 203
    def self.add_url_to_multi(multi, url, url_queue, responses, options)
      easy = Curl::Easy.new(url) do |curl|
        curl.headers["User-Agent"]        = (options[:user_agent] || USER_AGENT)
        curl.headers["If-Modified-Since"] = options[:if_modified_since].httpdate if options.has_key?(:if_modified_since)
        curl.headers["If-None-Match"]     = options[:if_none_match] if options.has_key?(:if_none_match)
        curl.headers["Accept-encoding"]   = 'gzip, deflate' if options.has_key?(:compress)
        curl.follow_location = true
        curl.userpwd = options[:http_authentication].join(':') if options.has_key?(:http_authentication)

        curl.max_redirects = options[:max_redirects] if options[:max_redirects]
        curl.timeout = options[:timeout] if options[:timeout]
        
        curl.on_success do |c|
          add_url_to_multi(multi, url_queue.shift, url_queue, responses, options) unless url_queue.empty?
          xml = decode_content(c)
          klass = determine_feed_parser_for_xml(xml)
          
          if klass
            begin
              feed = klass.parse(xml)
              feed.feed_url = c.last_effective_url
              feed.etag = etag_from_header(c.header_str)
              feed.last_modified = last_modified_from_header(c.header_str)
              responses[url] = feed
              options[:on_success].call(url, feed) if options.has_key?(:on_success)
            rescue Exception => e
              options[:on_failure].call(url, c.response_code, c.header_str, c.body_str) if options.has_key?(:on_failure)
            end
          else
            # puts "Error determining parser for #{url} - #{c.last_effective_url}"
            # raise NoParserAvailable.new("no valid parser for content.") (this would unfirtunately fail the whole 'multi', so it's not really useable)
            options[:on_failure].call(url, c.response_code, c.header_str, c.body_str) if options.has_key?(:on_failure)
          end
        end
        
        curl.on_failure do |c, err|
          add_url_to_multi(multi, url_queue.shift, url_queue, responses, options) unless url_queue.empty?
          responses[url] = c.response_code
          options[:on_failure].call(url, c.response_code, c.header_str, c.body_str) if options.has_key?(:on_failure)
        end
      end
      multi.add(easy)
    end