# File lib/AWS.rb, line 63 63: def AWS.canonical_string(params, host, method="POST", base="/") 64: # Sort, and encode parameters into a canonical string. 65: sorted_params = params.sort {|x,y| x[0] <=> y[0]} 66: encoded_params = sorted_params.collect do |p| 67: encoded = (CGI::escape(p[0].to_s) + 68: "=" + CGI::escape(p[1].to_s)) 69: # Ensure spaces are encoded as '%20', not '+' 70: encoded = encoded.gsub('+', '%20') 71: # According to RFC3986 (the scheme for values expected by signing requests), '~' 72: # should not be encoded 73: encoded = encoded.gsub('%7E', '~') 74: end 75: sigquery = encoded_params.join("&") 76: 77: # Generate the request description string 78: req_desc = 79: method + "\n" + 80: host + "\n" + 81: base + "\n" + 82: sigquery 83: 84: end