import re import time import random import string import hashlib def md5(text): hash = hashlib.md5() hash.update(text.encode("utf8")) return hash.hexdigest() def splitUrl(url): p = re.compile("^(http://|https://)?([^/?]+)(/[^?]*)?(\\?.*)?$") if not p: return None m = p.match(url) if not m: return "", "", "", "" scheme, domain, uri, args = m.groups() if not scheme: scheme = "http://" if not uri: uri = "/" if not args: args = "" return scheme, domain, uri, args def getRandomString(n): x = ''.join(random.sample(string.ascii_letters + string.digits, n)) return x def genUrl(url, key, ts): scheme, domain, uri, args = splitUrl(url) rand = getRandomString(10) text = "%s-%d-%s-%s" %(uri, ts, rand, key) hash = md5(text) authArg = "auth_key=%d-%s-%s" %(ts, rand, hash) if args: return "%s%s%s%s&%s" %(scheme, domain, uri, args, authArg) else: return "%s%s%s?%s" %(scheme, domain, uri, authArg) def test(): url = 'http://www.test.com/a.txt?a=b&c=d' secretKey = 'secretKey' ts = time.time() print("OriginUrl:{}".format(url)) print("AuthUrl:{}".format(genUrl(url, secretKey, ts))) if __name__ == "__main__": test()