def check_islogin(self, cookies): url = 'https://api.qimai.cn/account/userinfo' analysis = _get_analysis('', url) url += '?analysis={}'.format(quote(analysis)) res = self.session.get(url, cookies=cookies).json() if res['code'] == 10000: print('登录成功!') print('Hello, {}! '.format(res['userinfo']['realname'])) return True return False
def _init_captcha(self): url = 'https://api.qimai.cn/error/geetestInfo' params = { 'rand': 83 } p_str = self.process_params(params) analysis = _get_analysis(p_str, url) params.update({ 'analysis': analysis }) result = self.session.get(url, params=params).json() if result['success']: return result
def test(self, username, cookies): print('正在测试 Cookies : {}'.format(username)) try: cookies = json.loads(cookies) except TypeError: print('Cookies 不合法: ', username) if self.cookies_db.delete(username): print('删除 Cookies: ', username) else: print('疑似 redis 断开连接, 删除失败, 尝试调用删除器删除...') delete_account(self.site, 'cookies', username) try: test_url = TEST_URL_MAP[self.site] session = requests.session() session.headers = { 'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Origin': 'https://www.qimai.cn', 'Referer': 'https://www.qimai.cn/account/signin/r/%2Frank%2Findex%2Fbrand%2Ffree%2Fcountry%2Fcn%2Fgenre%2F5000%2Fdevice%2Fiphone', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36' } analysis = _get_analysis('', test_url) test_url += '?analysis={}'.format(quote(analysis)) resp = session.get(test_url, cookies=cookies).json() if resp['code'] == 10000: nickname = resp['userinfo']['realname'] if nickname and nickname != '': print('Cookies 有效!') print('Hello, {}! '.format(nickname)) else: print('Cookies 已过期: {}'.format(username)) if self.cookies_db.delete(username): print('删除 Cookies: ', username) else: print('疑似 redis 断开连接, 删除失败, 尝试调用删除器删除...') delete_account(self.site, 'cookies', username) else: print('Cookies 已过期: {}'.format(username)) if self.cookies_db.delete(username): print('删除 Cookies: ', username) else: print('疑似 redis 断开连接, 删除失败, 尝试调用删除器删除...') delete_account(self.site, 'cookies', username) except ConnectionError as e: print('发生异常', e.args)
def req_verify(self, phonenumber): url = 'https://api.qimai.cn/account/sendPhoneCodeBySignup' analysis = _get_analysis('', url) params = { 'analysis': analysis } validate = self._get_validate() validate.update({ 'phone': phonenumber }) result = self.session.post(url, params=params, data=validate).json() if result['code'] == 10000: return True return False
def register(self, phonenumber): is_phone_useful = self.check_phone(phonenumber) if not is_phone_useful: errors = '手机号已被注册! ' return errors success = self.req_verify(phonenumber) if not success: errors = '验证码接口请求失败! ' return errors print('验证码接口请求成功, 请在60秒内接收! ') msg = get_vcode(self.token, self.itemid, phonenumber, 60) vcode = re.search(r'您的验证码为(\d+),', msg).group(1) print('成功接收验证码: {} '.format(vcode)) # 模拟人为输入验证码延时 time.sleep(random.uniform(1.5, 3.0)) register_api = 'https://api.qimai.cn/account/signupForm' analysis = _get_analysis('', register_api) params = { 'analysis': analysis } password = self.get_random_password() print('生成随机密码: {}'.format(password)) data = { 'username': '', 'password': password, 'repassword': password, 'email': '', 'phone': phonenumber, 'phoneCode': vcode, 'agreement[0]': 'false' } result = self.session.post(register_api, params=params, data=data).json() if result['code'] == 10000: print('注册成功! ') return { 'username': phonenumber, 'password': password } error = result['msg'] return error
def login(self): url = 'https://api.qimai.cn/account/signinForm' params = {'analysis': _get_analysis('', url)} login_api = url + '?' + urlencode(params) data = { 'username': self.username, 'password': self.password, 'code': self._get_verifycode() } self._init_cookies() resp = self.session.post(login_api, data=data) cookies = self.session.cookies.get_dict() if self.check_islogin(cookies): return cookies elif resp.json()['msg'] == '用户名或密码错误': error = '用户名或密码错误' return error error = resp.json()['msg'] return error
def check_phone(self, phonenumber): """ 检查手机号是否已注册 :return: """ url = 'https://api.qimai.cn/account/userInfoCheck' analysis = _get_analysis('', url) params = { 'analysis': analysis } data = { 'field': 'phone', 'value': phonenumber } result = self.session.post(url, params=params, data=data).json() if result['code'] == 10000: return True elif result['code'] == 92002: print(result['msg']) return False