1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
require 'curb_core'
require 'curl/easy'
require 'curl/multi'
require 'uri'
require 'cgi'
# expose shortcut methods
module Curl
def self.http(verb, url, post_body=nil, put_data=nil, &block)
handle = Thread.current[:curb_curl] ||= Curl::Easy.new
handle.reset
handle.url = url
handle.post_body = post_body if post_body
handle.put_data = put_data if put_data
yield handle if block_given?
handle.http(verb)
handle
end
def self.get(url, params={}, &block)
http :GET, urlalize(url, params), nil, nil, &block
end
def self.post(url, params={}, &block)
http :POST, url, postalize(params), nil, &block
end
def self.put(url, params={}, &block)
http :PUT, url, nil, postalize(params), &block
end
def self.delete(url, params={}, &block)
http :DELETE, url, postalize(params), nil, &block
end
def self.patch(url, params={}, &block)
http :PATCH, url, postalize(params), nil, &block
end
def self.head(url, params={}, &block)
http :HEAD, urlalize(url, params), nil, nil, &block
end
def self.options(url, params={}, &block)
http :OPTIONS, urlalize(url, params), nil, nil, &block
end
def self.urlalize(url, params={})
query_str = params.map {|k,v| "#{URI.escape(k.to_s)}=#{CGI.escape(v.to_s)}" }.join('&')
if url.match(/\?/)
"#{url}&#{query_str}"
elsif query_str.size > 0
"#{url}?#{query_str}"
else
url
end
end
def self.postalize(params={})
params.respond_to?(:map) ? URI.encode_www_form(params) : (params.respond_to?(:to_s) ? params.to_s : params)
end
end
|