def make_data_to_sign(self, r, auth_header): if self.testurl: testparts = urlparse(self.testurl) requestparts = urlparse(r.url) url = urlunparse(testparts[0:2] + requestparts[2:]) else: url = r.url parsed_url = urlparse(url) data_to_sign = '\t'.join([ r.method, parsed_url.scheme, parsed_url.netloc, # Note: relative URL constraints are handled by requests when it sets up 'r' parsed_url.path + ('?' + parsed_url.query if parsed_url.query else ""), self.canonicalize_headers(r), self.make_content_hash(r), auth_header ]) logger.debug('data to sign: %s', '\\t'.join(data_to_sign.split('\t'))) return data_to_sign
def urlencode(url): p = list(urlparse(url)) p[1] = p[1].encode('idna') for i in range(2, len(p)): p[i] = urllib.quote(p[i].encode('utf-8')) return urlunparse(p).encode('ascii')
def set_url_arg(url, arg, val): url_parts = list(urlparse.urlparse(url)) query = dict(urlparse.parse_qsl(url_parts[4])) query.update({arg : str(val)}) url_parts[4] = urlencode(query) return urlparse.urlunparse(url_parts)