class QcloudCos::Http
Attributes
access_id[RW]
access_key[RW]
token[RW]
Public Class Methods
new(access_id, access_key, token: nil)
click to toggle source
# File lib/qcloud_cos/http.rb, line 10 def initialize(access_id, access_key, token: nil) @access_id = access_id @access_key = access_key @token = token end
Public Instance Methods
compute_auth(method, fullpath, headers = {})
click to toggle source
# File lib/qcloud_cos/http.rb, line 47 def compute_auth(method, fullpath, headers = {}) path, query_string = fullpath.split("?") q_sign_time = "#{Time.now.to_i};#{Time.now.to_i + 600}" q_header_list = headers.keys.map(&:downcase).sort.join(";") q_url_params = query_string.to_s.split("&").map { |s| s.split("=").first }.compact.map(&:downcase).sort.join(";") sign_key = OpenSSL::HMAC.hexdigest("SHA1", access_key, q_sign_time) http_parameters = query_string.to_s.split("&").map { |s| s.split("=") }.map { |field, value| [field.downcase, value]}.sort_by { |field, value| field}.map { |field, value| [field, value].compact.join("=") }.join("&") http_headers = headers.map { |h, v| [h.downcase, CGI.escape(v)].join("=") }.join("&") http_string = "#{method.downcase}\n#{path}\n#{http_parameters}\n#{http_headers}\n" string_to_sign = "sha1\n#{q_sign_time}\n#{Digest::SHA1.hexdigest(http_string)}\n" signature = OpenSSL::HMAC.hexdigest("SHA1", sign_key, string_to_sign) "q-sign-algorithm=sha1&q-ak=#{access_id}&q-sign-time=#{q_sign_time}&q-key-time=#{q_sign_time}&q-header-list=#{q_header_list}&q-url-param-list=#{q_url_params}&q-signature=#{signature}" end
delete(url, headers = {})
click to toggle source
# File lib/qcloud_cos/http.rb, line 24 def delete(url, headers = {}) request(Net::HTTP::Delete, url, nil, headers) end
get(url, headers = {})
click to toggle source
# File lib/qcloud_cos/http.rb, line 28 def get(url, headers = {}) request(Net::HTTP::Get, url, nil, headers) end
post(url, body = nil, headers = {})
click to toggle source
# File lib/qcloud_cos/http.rb, line 16 def post(url, body = nil, headers = {}) request(Net::HTTP::Post, url, body, headers) end
put(url, body = nil, headers = {})
click to toggle source
# File lib/qcloud_cos/http.rb, line 20 def put(url, body = nil, headers = {}) request(Net::HTTP::Put, url, body, headers) end
request(request_klass, url, body = nil, headers = {})
click to toggle source
# File lib/qcloud_cos/http.rb, line 32 def request(request_klass, url, body = nil, headers = {}) uri = URI.parse(url) headers["x-cos-security-token"] = token if token headers["Authorization"] = compute_auth(request_klass::METHOD, uri.request_uri, headers) response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http| request = request_klass.new(uri, headers) request.body = body http.request(request) end raise QcloudCos::Http::ResponseCodeError, response if response.code.to_i != 200 response end