class QC::API::Request
Attributes
response[R]
Public Class Methods
execute!(a, p = {})
click to toggle source
# File lib/qc.rb, line 201 def Request.execute! a, p = {} req = QC::API::Request.new a, p @result = req.execute!(QC::Key) if @result['ret_code'] == 0 @result else raise ArgumentError.new("#{@result['ret_code']}: #{@result['message']}") end end
new(action, extra_params = {})
click to toggle source
# File lib/qc.rb, line 211 def initialize action, extra_params = {} @response = :not_requested @params = [] @params << ['action', action] @params << ['access_key_id', QC::AccessKeyId] @params << ['signature_method', 'HmacSHA256'] @params << ['signature_version', 1] zone_set = false extra_params.each_pair do |k,v| zone_set = true if k == 'zone' next if v.nil? @params << [k.to_s, v] end @params << ['zone', QC::Zone] unless zone_set end
Public Instance Methods
execute!(key)
click to toggle source
# File lib/qc.rb, line 228 def execute!(key) _p = @params.dup _p << ['time_stamp', Time.now.utc.strftime("%FT%TZ")] @uri = URI.parse(API.json2url(key, _p.to_json)) # Establish a SSL connection Net::HTTP.start(@uri.host, 443, :use_ssl => true, :verify_mode => OpenSSL::SSL::VERIFY_PEER) do |https| # Verify additional the host name in the certificate to avoid MITM unless OpenSSL::SSL.verify_certificate_identity(https.peer_cert, 'qingcloud.com') raise 'Hostname in certifcate does NOT match! (MITM?)' end # Verify the individual certificate unless https.peer_cert.to_s == QC::CERT_FILE raise "Certificate is NOT trustworthy!" end #################################################################### # Starting from this point I consider the SSL connection as safe! @response = https.request(Net::HTTP::Get.new(@uri.request_uri)) # After this point we close the SSL connection. #################################################################### end JSON.parse(@response.body) end