• 签名规则


    from urllib import  parse
    url='http://www.baidu.com?qurey=python基础教程 @@@'
    # url_str=parse.quote_plus(url) #url编码
    print(parse.quote_plus(url))


    from urllib import parse

    baidu_url='https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1
    &tn=baidu&wd=python%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B&
    oq=python&rsv_pq=b6c92ffc00023232&rsv_t=be4d%2FdgIVLHbmdj5jU9bfpJTXGIAcO4y2u
    %2BfKsxWWJW2wIKbEuXL6tNXiug&rqlang=cn&rsv_enter=1&inputT=878&
    rsv_sug3=9&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&
    prefixsug=python&rsp=1&rsv_sug4=2134&rsv_sug=1'

    print(parse.unquote_plus(baidu_url)) #url解码




    # 1、请求数据获取到
    # 2、提取到商家编码
    # 3、将商家编码进程2md5 得到astr
    # 4、再将请求数据进行一次urldecodeurlstr
    # 5astr+url_str MD5


    from urllib import parse
    import hashlib

    def my_md5(s):
    md=hashlib.md5()
    md.update(s.encode()) #加密必须传btye类型
    return md.hexdigest()

    def get_vendorid(req_data):
    data_dict={}
    sub_list=req_data.split('&')
    #['vendorId=1697', 'posCode=pos006', 'ip=127.0.0.1', 'posVersion=2.1.1.1.1']
    for i in sub_list:
    k,v=i.split('=')
    #[verid,1607]
    # data_dict.setdefault(k,v)
    data_dict[k]=v #{'posVersion': '2.1.1.1.1', 'vendorId': '1697'……}
    return data_dict.get('vendorId')

    def sign(req_data):
    verid=get_vendorid(req_data) #调用获取veriodid函数
    first=my_md5(verid)
    astr=my_md5(first) #两次MD5
    url_str=parse.quote_plus(req_data) #url编码
    res=my_md5(astr+url_str)
    return res


    s='vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0'
    print(sign(s))



    #方法二 用类来写
    from urllib import parse
    import hashlib
    class Sign(object): #定义类名,新式类
    def __init__(self,req_data):
    self.req_data=req_data #这写了self的话,在其他函数里面了可以用self.xx
    self.ger_verid()
    self.get_sign()

    def md5(self,s):
    md = hashlib.md5()
    md.update(s.encode())
    return md.hexdigest()

    def ger_verid(self):
    data_dict = {}
    sub_list = self.req_data.split('&')
    # [vendorId=1697,posCode=pos006]
    for i in sub_list:
    k, v = i.split('=')
    data_dict[k] = v
    self.verid= data_dict.get('vendorId')

    def get_sign(self):
    first = self.md5(self.verid)
    astr = self.md5(first) # 两次MD5
    url_str = parse.quote_plus(self.req_data) # url编码
    self.sign = self.md5(astr + url_str)
    return self.sign

    print('__nam__',__name__)
    if __name__ =='__main__':
    # 判断这个python是在别的地方导入的,还是直接运行的这个python文件
    # 这句话一般是做调试的时候用的。
    # 1、如果是直接运行这个python文件的时候,这句话一点用都没有


    s = 'vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0'
    abc=Sign(s)
    print(abc.sign)
    # abc.get_sign()
    # print(abc.sign)
    # print('我是sign')














  • 相关阅读:
    连接查询
    分组查询
    【转载】C语言 构建参数个数不固定函数
    【转载】vc编译exe的体积最小优化
    VC6微软正则表达式greta使用案例
    MultiByteToWideChar和WideCharToMultiByte
    【转载】VC操作剪切板
    VC/MFC分割字符串(SplitString)返回CStringArray
    【转载】实现UTF8与GB2312编码格式相互转换(VC)已经验证!
    VC6配置sqlite数据库
  • 原文地址:https://www.cnblogs.com/jiadan/p/9090159.html
Copyright © 2020-2023  润新知