class Qingting::Utils::Http
Constants
- DEFAULT_HEADERS
- DEFAULT_OPEN_TIMEOUT
- DEFAULT_READ_TIMEOUT
- DEFAULT_RETRY_TIMES
- DEFAULT_USER_AGENT
- HTTP_VERB_MAP
- RETRY_SLEEP_TIME
Public Class Methods
new(method, url, params: nil, body: nil, headers: {}, opts: {})
click to toggle source
# File lib/qingting/utils/http.rb, line 28 def initialize(method, url, params: nil, body: nil, headers: {}, opts: {}) method = method.downcase.to_sym err_msg = "http method #{method} is not supported" raise err_msg unless HTTP_VERB_MAP.keys.include?(method) @uri = URI(url) @uri.query = URI.encode_www_form(params) unless params.nil? @request = prepare_request(method, body, headers) @opts = opts end
Public Instance Methods
send_request()
click to toggle source
# File lib/qingting/utils/http.rb, line 38 def send_request tries ||= DEFAULT_RETRY_TIMES opts ||= default_opts.merge @opts Net::HTTP.start(@uri.host, @uri.port, opts) do |http| http.request(@request) end # if raise Timeout::Error retry it for 3 times rescue Net::OpenTimeout, Net::ReadTimeout (tries -= 1).zero? ? (raise "Time out") : retry end
Private Instance Methods
default_opts()
click to toggle source
# File lib/qingting/utils/http.rb, line 59 def default_opts { use_ssl: 'https' == @uri.scheme, open_timeout: DEFAULT_OPEN_TIMEOUT, read_timeout: DEFAULT_READ_TIMEOUT } end
prepare_request(method, body, headers)
click to toggle source
# File lib/qingting/utils/http.rb, line 51 def prepare_request(method, body, headers) headers = DEFAULT_HEADERS.merge(headers) request = HTTP_VERB_MAP[method].new @uri request.initialize_http_header(headers) request.body = body.to_json unless body.nil? request end