def params(self): parameters = self.parameters signature = self.signer.sign_string(self.signature, str(self.credentials.access_key_secret) + '&') parameters['Signature'] = signature params = '?' + urlencode(parameters) return params
def handle_request(self, context): http_request = context.http_request api_request = context.api_request http_request.accept_format = 'JSON' # handle params to body_params or query_params parse_params = { "query": (api_request._query_params, "QueryParams"), "body": (api_request._body_params, "BodyParams"), "path": (api_request.path_params, "PathParams"), "header": (api_request._headers, "Headers") } # TODO default params is query_params if api_request.params: key = api_request._param_position if key in parse_params: params, position = parse_params[key] params.update(self._filter_params(api_request.params)) context.client.logger.debug('Request received. Product:%s %s: %s', context.client.product_code, position, str(params)) # handle api_request region_id, rpc and roa must if 'RegionId' not in api_request._query_params: api_request._query_params['RegionId'] = context.config.region_id # handle headers body_params = api_request._body_params # ROA GET POST PUT DEL # RPC GET POST if body_params: body = urlencode(body_params) api_request._content = body api_request._headers["Content-Type"] = format_type.APPLICATION_FORM elif api_request._content and "Content-Type" not in api_request._headers: api_request._headers["Content-Type"] = format_type.APPLICATION_OCTET_STREAM http_request.body = api_request._content user_agent = _modify_user_agent(context.config.user_agent) api_request._headers['User-Agent'] = user_agent api_request._headers['x-acs-region-id'] = str(context.config.region_id) api_request._headers['x-sdk-client'] = 'python/2.0.0' api_request._headers['Accept-Encoding'] = 'identity' # handle other attr http_request.method = api_request.method http_request.proxy = context.config.proxy # {} http_request.scheme = api_request.scheme # http|https if http_request.scheme == 'https': if context.config.enable_https: http_request.port = context.config.https_port else: raise ClientException(msg='Please make sure the config enable_https is True.') else: http_request.port = context.config.http_port
def params(self): param = "" param += self._uri if not param.endswith("?"): param += "?" param += urlencode(self.request._query_params) if param.endswith("?"): param = param[0:(len(param) - 1)] return param
def handle_request(self, context): http_request = context.http_request api_request = context.api_request credentials = http_request.credentials signature, headers, params = Signer().sign(credentials, context) http_request.signature = signature http_request.params = params # modify headers body_params = api_request._body_params if body_params: body = urlencode(body_params) headers = self._modify_http_headers(headers, body, format_type.APPLICATION_FORM) context.http_request.headers = headers
def _calc_signature(self, method, params): sorted_parameters = sorted(iteritems(params), key=lambda queries: queries[0]) sorted_query_string = self._pop_standard_urlencode(urlencode(sorted_parameters)) canonicalized_query_string = self._pop_standard_urlencode(pathname2url(sorted_query_string)) string_to_sign = method + "&%2F&" + canonicalized_query_string return string_to_sign