目的:让s 会话参数在多个 py 文件之间传递

1.函数返回值方式传递

2.单例实现全局参数存储

globalmanager.py:

class GlobalManager(object):
    """模块间共享变量"""
    _globaldict = {}
    _instance = False

    def get_value(self, name):
        try:
            return self._globaldict[name]
        except KeyError as e:
            print("获取的变量名称:{}不存在!!!!!!!!!!!!!!!".format(name))
            return None

    def set_value(self, name, value):
        self._globaldict[name] = value

    def __new__(cls, *args, **kwargs):  #单例,固定写法
        if cls._instance == False:
            cls._instance = super().__new__(cls, *args, **kwargs)
        return cls._instance

if __name__ == "__main__":
    globalm = GlobalManager()

login.py:

import requests
from globalmanager import GlobalManager
#密码的加密逻辑:md5(md5(password) + rand)
#1.md5方法:md5.js
#2.password:123456
#3.rand:http://zentaomax.demo.zentao.net/user-refreshRandom.html

gm = GlobalManager()


def login():
    s = requests.session() #创建会话保存器
    gm.set_value("huihua",s)
    #获取cookie
    url_cookie = 'http://zentaomax.demo.zentao.net/user-login.html'
    header_cookie = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36",
    "Referer": "http://zentaomax.demo.zentao.net/my/"
    }
    res_cookie = gm.get_value('huihua').get(url_cookie,headers=header_cookie)
    d = requests.utils.dict_from_cookiejar(res_cookie.cookies)
    print(d)
    #密码的加密
    #1.rand获取
    url_rand = 'http://zentaomax.demo.zentao.net/user-refreshRandom.html'
    header_rand = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36",
    "X-Requested-With": "XMLHttpRequest",
    "Referer": "http://zentaomax.demo.zentao.net/user-login.html"
    }
    res_rand = gm.get_value('huihua').get(url_rand,headers=header_rand)
    print(res_rand.text)

    #2.python实现调用js文件中的方法md5
    password = '123456'
    from encrypt import ExecJs
    e = ExecJs()
    step1 = e.get_encrypt_pwd('md5',password)
    step2 = e.get_encrypt_pwd('md5',step1 + res_rand.text)
    print(step2)

    #禅道登录
    url = 'http://zentaomax.demo.zentao.net/user-login.html'
    data = {
        "account": "demo",
        "password": step2,
        "passwordStrength": "0",
        "referer": "/",
        "verifyRand": res_rand.text,
        "keepLogin": "0",
        "captcha": ""
    }
    header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36",
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "Host": "zentaomax.demo.zentao.net",
    "Connection": "keep-alive",
    "Content-Length": "127",
    "Accept": "application/json, text/javascript, */*; q=0.01",
    "X-Requested-With": "XMLHttpRequest",
    "Origin": "http://zentaomax.demo.zentao.net",
    "Referer": "http://zentaomax.demo.zentao.net/user-login.html",
    "Accept-Encoding":"gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9"
    }
    res = gm.get_value('huihua').post(url,data=data,headers=header)
    print(res.text)

myinfo.py:

# 个人档案接口
import requests
from login import login
from globalmanager import GlobalManager

gm = GlobalManager()

def myinfo():
    url = 'http://zentaomax.demo.zentao.net/my-profile.html'
    query_str = {
        "onlybody": "yes"
    }
    header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"
    }
    res = gm.get_value('huihua').get(url=url,headers=header,params=query_str)
    return res.text

#1.登录
login()
#2.个人档案
res = myinfo()
print(res)