def http(urls_with_config, multi_options={}, &blk)
m = Curl::Multi.new
multi_options.each { |k,v| m.send("#{k}=", v) }
callbacks = [:on_progress,:on_debug,:on_failure,:on_success,:on_body,:on_header]
urls_with_config.each do|conf|
c = conf.dup
url = c.delete(:url)
method = c.delete(:method)
headers = c.delete(:headers)
easy = Curl::Easy.new(url)
callbacks.each do |cb|
cbproc = c.delete(cb)
easy.send(cb,&cbproc) if cbproc
end
case method
when :post
fields = c.delete(:post_fields)
easy.post_body = fields.map{|f,k| "#{easy.escape(f)}=#{easy.escape(k)}"}.join('&')
when :put
easy.put_data = c.delete(:put_data)
when :head
easy.head = true
when :delete
easy.delete = true
when :get
else
end
headers.each {|k,v| easy.headers[k] = v } if headers
c.each { |k,v| easy.send("#{k}=",v) }
easy.on_complete {|curl,code| blk.call(curl,code,method) } if blk
m.add(easy)
end
m.perform
end