initial commit, finish the logic of login and logout
This commit is contained in:
commit
6bb5f77141
126
login_manager.py
Normal file
126
login_manager.py
Normal file
|
@ -0,0 +1,126 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
import urllib.response
|
||||
import logging
|
||||
import re
|
||||
import argparse
|
||||
|
||||
|
||||
class login_manager:
|
||||
logger = logging.getLogger('login_manager')
|
||||
|
||||
login_url = 'http://10.1.206.13/a70.htm'
|
||||
logout_url = 'http://10.1.206.13/F.htm'
|
||||
|
||||
def __init__(self, username: str = '', password: str = ''):
|
||||
self.username = username
|
||||
self.password = password
|
||||
|
||||
@staticmethod
|
||||
def generate_post_data(username: str, password: str):
|
||||
data_template = {
|
||||
'DDDDD': None,
|
||||
'upass': None,
|
||||
'R1': 0,
|
||||
'R2': '',
|
||||
'R3': 0,
|
||||
'R6': 0,
|
||||
'para': 00,
|
||||
'0MKKey': 123456,
|
||||
'buttonClicked': '',
|
||||
'redirect_url': '',
|
||||
'err_flag': '',
|
||||
'username': '',
|
||||
'password': '',
|
||||
'user': '',
|
||||
'cmd': '',
|
||||
'Login': ''
|
||||
}
|
||||
|
||||
data_template['DDDDD'] = username
|
||||
data_template['upass'] = password
|
||||
|
||||
login_manager.generate_post_data_hook(data_template)
|
||||
|
||||
login_manager.logger.debug('the generated post data is %s', str(data_template))
|
||||
|
||||
return bytes(urllib.parse.urlencode(data_template), 'utf-8')
|
||||
|
||||
@staticmethod
|
||||
def generate_post_data_hook(post_data: dict) -> None:
|
||||
username = post_data['DDDDD']
|
||||
username += '@bistu'
|
||||
post_data['DDDDD'] = username
|
||||
|
||||
def login(self):
|
||||
headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
|
||||
'Accept-Language': 'en-US,zh-CN;q=0.5',
|
||||
'Accept-Encoding': 'gzip, deflate'
|
||||
}
|
||||
post_data = self.generate_post_data(self.username, self.password)
|
||||
|
||||
self.logger.debug('the dest url is: %s', self.login_url)
|
||||
self.logger.debug('the headers is: %s', str(headers))
|
||||
self.logger.debug('the encoded post data is %s', str(post_data))
|
||||
|
||||
req = urllib.request.Request(url=self.login_url, data=post_data, headers=headers, method='POST')
|
||||
|
||||
self.logger.info('sending the login request...')
|
||||
|
||||
with urllib.request.urlopen(req) as response:
|
||||
response_body = response.read().decode('gbk')
|
||||
|
||||
html_title = re.search('<title>(.*)</title>', response_body)[1]
|
||||
|
||||
self.logger.info('http_status: %d', response.status)
|
||||
self.logger.info('title_of_response_html: %s', html_title)
|
||||
self.logger.info('login_state: %s', 'success' if html_title == '认证成功页' else 'fail')
|
||||
|
||||
@staticmethod
|
||||
def logout():
|
||||
req = urllib.request.Request(url=login_manager.logout_url)
|
||||
|
||||
login_manager.logger.info('sending the logout request...')
|
||||
|
||||
with urllib.request.urlopen(req) as response:
|
||||
response_body = response.read().decode('gbk')
|
||||
|
||||
html_title = re.search('<title>(.*)</title>', response_body)[1]
|
||||
|
||||
login_manager.logger.info('http_status: %d', response.status)
|
||||
login_manager.logger.info('title_of_response_html: %s', html_title)
|
||||
login_manager.logger.info('logout_state: %s', 'success' if html_title == '信息页' else 'fail')
|
||||
|
||||
|
||||
def main():
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger('main')
|
||||
|
||||
parser = argparse.ArgumentParser(description='login or logout bistu wifi')
|
||||
|
||||
parser.add_argument('username', nargs='?',
|
||||
type=str, help='username you use to login bistu wifi, logout if not provided')
|
||||
parser.add_argument('password', nargs='?',
|
||||
type=str, help='password you use to login bistu wifi, logout if not provided')
|
||||
parser.add_argument('-o', '--logout', nargs='?', type=bool,
|
||||
help='logout bistu wifi')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
logger.debug('parse argument: username= %s', args.username)
|
||||
logger.debug('parse argument: password= %s', args.password)
|
||||
logger.debug('parse argument: logout= %s', args.logout)
|
||||
|
||||
if args.username is None or args.password is None or args.logout:
|
||||
login_manager.logout()
|
||||
else:
|
||||
manager = login_manager(args.username, args.password)
|
||||
manager.login()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in a new issue