def _amz_canonicalize(headers): r"""Canonicalize AMZ headers in that certain AWS way. >>> _amz_canonicalize({"x-amz-test": "test"}) 'x-amz-test:test\n' >>> _amz_canonicalize({"x-amz-first": "test", ... "x-amz-second": "hello"}) 'x-amz-first:test\nx-amz-second:hello\n' >>> _amz_canonicalize({}) '' """ ''' CanonicalizedAmzHeaders描述 CanonicalizedAmzHeaders = "\n".join( allheaders witch startswith "x-amz-" or "x-sina-" ) + '\n' 这里的所有header名需要转换成小写,并按header名进行排序,过滤掉空格,并加以’\n’进行连接 ''' rv = {} for header, value in six.iteritems(headers): header = header.lower() # if header.startswith("x-amz-"): #edit by hanchao if header.startswith("x-amz-") or header.startswith("x-sina-"): rv.setdefault(header, []).append(value) parts = [] for key in sorted(rv): parts.append("%s:%s\n" % (key, ",".join(rv[key]))) return "".join(parts)
def url(self, base_url, arg_sep="&", bucketAsDomain=False): if bucketAsDomain: #bucket name 作为域名 url = 'http://' + self.bucket + "/" else: url = base_url + "/" #生成url,不适用https方式请求 if url.startswith('https://'): url = 'http://' + url[8:] if self.key: url += aws_urlquote(self.key) if self.subresource or self.args: ps = [] if self.subresource: ps.append(self.subresource) if self.args: args = self.args if hasattr(args, "iteritems") or hasattr(args, "items"): args = six.iteritems(args) args = ((urllib.parse.quote_plus(k), urllib.parse.quote_plus(v)) for (k, v) in args) args = arg_sep.join("%s=%s" % i for i in args) ps.append(args) url += "?" + "&".join(ps) return url
def __str__(self): rv = self.msg if self.extra: rv += " (" rv += ", ".join("%s=%r" % i for i in six.iteritems(self.extra)) rv += ")" return rv
def canonical_resource(self): ''' 详见:http://sinastorage.sinaapp.com/developer/interface/aws/auth.html ''' res = "/" if self.bucket: res += '%s/' % aws_urlquote(self.bucket) if self.key is not None: res += "%s" % aws_urlquote(self.key) if self.subresource: if self.subresource in self.subresource_need_to_sign: res += "?%s" % aws_urlquote(self.subresource) if self.args: rv = {} for key, value in six.iteritems(self.args): # key = key.lower() if key in self.subresource_kv_need_to_sign: rv[key] = value if len(rv) > 0: parts = [] for key in sorted(rv): parts.append("%s=%s" % (key, rv[key])) res += "%s%s" % ('&' if self.subresource and self.subresource in self.subresource_need_to_sign else '?', "&".join(parts)) return res
def url(self, base_url, arg_sep="&", bucketAsDomain=False): if bucketAsDomain: #bucket name 作为域名 url = 'http://'+self.bucket + "/" else: url = base_url + "/" #生成url,不适用https方式请求 if url.startswith('https://') : url = 'http://'+url[8:] if self.key: url += aws_urlquote(self.key) if self.subresource or self.args: ps = [] if self.subresource: ps.append(self.subresource) if self.args: args = self.args if hasattr(args, "iteritems") or hasattr(args, "items"): args = six.iteritems(args) args = ((urllib.parse.quote_plus(k), urllib.parse.quote_plus(v)) for (k, v) in args) args = arg_sep.join("%s=%s" % i for i in args) ps.append(args) url += "?" + "&".join(ps) return url
def canonical_resource(self): ''' 详见:http://sinastorage.sinaapp.com/developer/interface/aws/auth.html ''' res = "/" if self.bucket: res += '%s/'%aws_urlquote(self.bucket) if self.key is not None: res += "%s" % aws_urlquote(self.key) if self.subresource: if self.subresource in self.subresource_need_to_sign: res += "?%s" % aws_urlquote(self.subresource) if self.args: rv = {} for key, value in six.iteritems(self.args): # key = key.lower() if key in self.subresource_kv_need_to_sign: rv[key] = value if len(rv) > 0 : parts = [] for key in sorted(rv): parts.append("%s=%s" % (key, rv[key])) res += "%s%s" % ('&' if self.subresource and self.subresource in self.subresource_need_to_sign else '?', "&".join(parts)) return res
def _amz_canonicalize(headers): r"""Canonicalize AMZ headers in that certain AWS way. >>> _amz_canonicalize({"x-amz-test": "test"}) 'x-amz-test:test\n' >>> _amz_canonicalize({"x-amz-first": "test", ... "x-amz-second": "hello"}) 'x-amz-first:test\nx-amz-second:hello\n' >>> _amz_canonicalize({}) '' """ ''' CanonicalizedAmzHeaders描述 CanonicalizedAmzHeaders = "\n".join( allheaders witch startswith "x-amz-" or "x-sina-" ) + '\n' 这里的所有header名需要转换成小写,并按header名进行排序,过滤掉空格,并加以’\n’进行连接 ''' rv = {} print(headers) for header, value in six.iteritems(headers): print(header, value) header = header.lower() # if header.startswith("x-amz-"): #edit by hanchao if header.startswith("x-amz-") or header.startswith("x-sina-"): rv.setdefault(header, []).append(value) parts = [] print(rv) for key in sorted(rv): print(key, rv[key]) parts.append("%s:%s\n" % (key, ",".join(rv[key]))) return "".join(parts)
def headers_metadata(headers): return dict((h[11:], v) for h, v in six.iteritems(headers) if h.lower().startswith("x-amz-meta-"))
def metadata_headers(metadata): return dict(("X-AMZ-Meta-" + h, v) for h, v in six.iteritems(metadata))