Esempio n. 1
0
def auth_visitor_login():
    login_session = requests.session()
    timestamp = int(time.time() * 1000)
    data = {
        "platform":
        3,
        "deviceToken":
        "B5E1B1E4-BAA1-4F06-9011-A1E21A99DA79",
        "deviceName":
        "iPhone 6s",
        "sign":
        helper.get_str_md5(helper.APP_AES_KEY +
                           "B5E1B1E4-BAA1-4F06-9011-A1E21A99DA79" +
                           str(timestamp) + helper.APP_AES_KEY),
        "timestamp":
        timestamp
    }
    json_data = json.dumps(data)
    response = login_session.post(urls.auth_visitor_login,
                                  data=json_data,
                                  headers={"Content-Type": "application/json"})
    if response.status_code != 200:
        print("uc登录异常: {}".format(response.text))
    ret_json = helper.check_json_response(response)
    login_session.close()
    if int(ret_json['code']) != 200:
        print("uc登录异常:{}".format(ret_json))
    return ret_json
Esempio n. 2
0
 def studentclasslist_app(self, version="9.0.8"):
     token = self.client.user_token
     params = {
         "token":
         token,
         "sign":
         get_str_md5(ConfigCase.APP_AES_KEY + token +
                     ConfigCase.APP_AES_KEY)
     }
     return self.client.get(url=self.url_builder.studentmyclasslist_app,
                            params=params,
                            sign_mode=11,
                            headers={"version": version})
Esempio n. 3
0
 def getclasslistofschool_app(self):
     now = int(time.time())
     token = self.client.user_token
     post_data = {
         "now":
         now,
         "sign":
         get_str_md5(ConfigCase.APP_AES_KEY + str(now) + token +
                     ConfigCase.APP_AES_KEY),
         "token":
         token
     }
     return self.client.post(url=self.url_builder.schoolandclassinfo_app,
                             data=post_data)
Esempio n. 4
0
 def searchclasses_app(self, schoolid):
     now = int(time.time())
     token = self.client.user_token
     post_data = \
         {
             "now": now,
             "sign": get_str_md5(ConfigCase.APP_AES_KEY + str(now) + token + ConfigCase.APP_AES_KEY),
             "token": token,
             "payload":
                 {
                     "schoolid": schoolid
                 }
         }
     return self.client.post(url=self.url_builder.searchclasses_app,
                             data=post_data)
Esempio n. 5
0
def app_login(username, password, sid=6, platform=2, devicetoken="", devicename=""):
    sign_switcher = {2: ewt_const.web_sign, 6: ewt_const.android_sign, 7: ewt_const.ios_sign}
    # todo: 当sid=2时,登录报错,提示密码有误
    login_session = requests.session()
    encrypt_password = ewt_helper.encrypt_app_password(password)
    post_data = {"username": username, "password": encrypt_password, "sid": sid, "platform": platform,
                 "devicetoken": devicetoken, "devicename": devicename}
    sign_value = sign_switcher.get(sid)
    post_data['sign'] = helper.get_str_md5(sign_value)
    post_data['timestamp'] = int(time.time() * 1000)

    response = login_session.post(uc_urls.app_login, data=post_data)
    logger.debug(response.text)
    ret_json = ewt_helper.check_json_response(response)
    if "Token" not in ret_json:
        logger.fatal("Login failed, response is: {}".format(response.text))
    login_session.close()
    return ret_json['Token']
Esempio n. 6
0
    def __append_request_params(self, origin_params, sign_mode=None):
        sign_key = "eo^nye1j#!wt2%v)"
        exclude_keys = ['sid', 'osVersion', 'token']
        prepared_params = {}
        if not origin_params:
            origin_params = {}
        # if isinstance(origin_params, str):
        #     origin_params = eval(origin_params)
        prepared_params.update(origin_params)

        if 'sign' not in prepared_params:
            _content = ''
            _content += sign_key
            value_list_for_sign = []
            keys = [k for k in prepared_params.keys() if k not in exclude_keys]
            if sign_mode == 0:
                return prepared_params
            if sign_mode == 1:
                # 签名时包含token,先按照key进行排序,再拼接value
                if 'token' in origin_params:
                    keys.append('token')
                value_list_for_sign = [prepared_params[k] for k in sorted(keys)]
            elif sign_mode == 2:
                # 签名时包含token,先按照key进行排序,再按照key=value的格式拼接后进行签名
                if 'token' in origin_params:
                    keys.append('token')
                value_list_for_sign = ["&{}={}".format(k, prepared_params[k]) for k in sorted(keys)]
            elif sign_mode == 3:
                # 签名时包含token,不排序,按原顺序拼接value后进行签名
                if 'token' in origin_params:
                    keys.append('token')
                value_list_for_sign = [prepared_params[k] for k in keys]
            elif sign_mode == 4:
                # 签名时包含token,不排序,按原顺序按照key=value的格式拼接后进行签名
                if 'token' in origin_params:
                    keys.append('token')
                value_list_for_sign = ["&{}={}".format(k, prepared_params[k]) for k in keys]
            elif sign_mode == 5:
                # 签名时不包含token,先按照key进行排序,再拼接value
                value_list_for_sign = [prepared_params[k] for k in sorted(keys)]
            elif sign_mode == 6:
                # 签名时不包含token,先按照key进行排序,再按照key=value的格式拼接后进行签名
                value_list_for_sign = ["&{}={}".format(k, prepared_params[k]) for k in sorted(keys)]
            elif sign_mode == 7:
                # 签名时不包含token,不排序,按原顺序拼接value后进行签名
                value_list_for_sign = [prepared_params[k] for k in keys]
            elif sign_mode == 8:
                # 签名时不包含token,不排序,按原顺序按照key=value的格式拼接后进行签名
                value_list_for_sign = ["&{}={}".format(k, prepared_params[k]) for k in keys]
            elif sign_mode == 9:
                # 签名时包含token和sid,先按照key进行排序,再拼接value
                if 'sid' in origin_params:
                    keys.append('sid')
                if 'token' in origin_params:
                    keys.append('token')
                value_list_for_sign = [prepared_params[k] for k in sorted(keys)]
            elif sign_mode == 11:  # app教师端接口校验方式
                # 签名时包含token、sid,先按照key进行排序,再拼接value
                prepared_params["token"] = self.user_token
                keys.append('token')
                if 'sid' in origin_params:

                    keys.append('sid')
                value_list_for_sign = [prepared_params[k] for k in sorted(keys)]
            for v in value_list_for_sign:
                _content += str(v)
            if sign_mode in (2, 4, 6, 8):
                _content += "&" + sign_key
            else:
                _content += sign_key
            if sign_mode == 10:
                _content = sign_key + str(self.user_id) + sign_key
            prepared_params["sign"] = helper.get_str_md5(_content)
        return prepared_params
Esempio n. 7
0
    def __append_request_params(
            self,
            origin_params,
            sign_mode=RequestSignMode.no_token_no_sort_key_value_list):
        """
        补充请求参数
        :param origin_params: 原始参数,即从通过用户选择传过来的参数
        :param sign_mode: 加签的模式
        :return: 补充完参数后的字典
        """
        exclude_keys = ['sid', 'osVersion', 'token']
        prepared_params = {}
        if not origin_params:
            origin_params = {}

        prepared_params.update(origin_params)
        # add token to request body
        prepared_params["token"] = self.user_token

        # add sign to request body
        if not 'sign' in prepared_params:
            _content = ''
            # 1. 开头加key
            _content += sign_key
            # 2. 中间加参数值列表
            value_list_for_sign = []
            keys = [k for k in prepared_params.keys() if k not in exclude_keys]
            # sign_mode > 10 表示签名时要包含token
            if sign_mode > 10:
                keys.append('token')

            if sign_mode % 10 == 1:
                # 1 先按照key进行排序,再拼接value后进行签名
                value_list_for_sign = [
                    prepared_params[k] for k in sorted(keys)
                ]
            elif sign_mode % 10 == 2:
                # 2 先按照key进行排序,再按照key=value的格式拼接后进行签名
                value_list_for_sign = [
                    "&{}={}".format(k, prepared_params[k])
                    for k in sorted(keys)
                ]
            elif sign_mode % 10 == 3:
                # 3 不排序,按原顺序拼接value后进行签名
                value_list_for_sign = [prepared_params[k] for k in keys]
            elif sign_mode % 10 == 4:
                # 4 不排序,按原顺序,按照key=value的格式拼接后进行签名
                value_list_for_sign = [
                    "&{}={}".format(k, prepared_params[k]) for k in keys
                ]

            for v in value_list_for_sign:
                _content += str(v)
            # 3. 结尾加上key
            if sign_mode % 2 == 0:
                _content += "&" + sign_key
            else:
                _content += sign_key
            # 4. 获取md5签名
            prepared_params["sign"] = helper.get_str_md5(_content)

        # add sid in request body
        if not 'sid' in prepared_params:
            prepared_params['sid'] = self.sid

        # add sid in request body
        if not 'osVersion' in prepared_params:
            prepared_params['osVersion'] = self.os_version

        return prepared_params