From 3d8e40bb5e8562877a5c9aee02d0523ab5ab7730 Mon Sep 17 00:00:00 2001 From: wufayuan <2858767122@qq.com> Date: Wed, 30 Mar 2022 21:19:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E4=B8=80=E6=AD=A5=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E5=90=8C=E6=97=B6=E8=AF=B7=E6=B1=82=E7=99=BB=E9=99=86=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E7=AD=89=E7=94=A8=E6=88=B7=E7=9B=B8=E5=85=B3=E6=83=85?= =?UTF-8?q?=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + dcs/dcs.log | 4 ++ dcs/tests/requestHandler.py | 16 ++++---- dcs/tests/user_request_handler.py | 64 +++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 dcs/tests/user_request_handler.py diff --git a/.gitignore b/.gitignore index 34bf1cd..e3ac5ea 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ !/dcs/tests/zhiwang.py +!/dcs/tests/cookie.py diff --git a/dcs/dcs.log b/dcs/dcs.log index 4a657fe..0f66d06 100644 --- a/dcs/dcs.log +++ b/dcs/dcs.log @@ -380,3 +380,7 @@ 2022-03-29 11:26:47.684 | INFO | __main__::16 - starting the server... 2022-03-29 11:34:44.764 | INFO | __main__::9 - reading config args... 2022-03-29 11:34:44.764 | INFO | __main__::16 - starting the server... +2022-03-30 21:17:57.789 | INFO | __main__::9 - reading config args... +2022-03-30 21:17:57.790 | INFO | __main__::16 - starting the server... +2022-03-30 21:18:01.353 | INFO | dcs.tests.user_request_handler:login:37 - [REQUEST] login +2022-03-30 21:18:01.380 | INFO | dcs.tests.user_request_handler:login:44 - [RESPONSE] login: 用户名错误,登录失败 diff --git a/dcs/tests/requestHandler.py b/dcs/tests/requestHandler.py index 9000a44..87c60e0 100644 --- a/dcs/tests/requestHandler.py +++ b/dcs/tests/requestHandler.py @@ -6,6 +6,7 @@ import dcs.tests.config import dcs.tests.database as database from loguru import logger from dcs.tests.spider import Spider +from dcs.tests.user_request_handler import Urh def generate_response(response): @@ -87,16 +88,15 @@ class RequestHandler(threading.Thread): try: if self.request_map['action'] == 'test': self.test() + self.client_socket.close() elif self.request_map['action'] == 'translate': self.translate() elif self.request_map['action'] == 'crawl zhiwang': self.crawl_zhiwang() - elif self.request_map['action'] == 'report_free': - self.report_state('free') - elif self.request_map['action'] == 'login': - self.login(self.request_map['user'], self.request_map['password']) - elif self.request_map['action'] == 'register': - self.register(self.request_map['user'], self.request_map['password']) - finally: - self.client_socket.close() + self.client_socket.close() + elif self.request_map['action'] in ['report_free', 'login', 'register']: + urh = Urh(self.request_map, self.client_socket) + urh.start() + except: + pass diff --git a/dcs/tests/user_request_handler.py b/dcs/tests/user_request_handler.py new file mode 100644 index 0000000..2d941e8 --- /dev/null +++ b/dcs/tests/user_request_handler.py @@ -0,0 +1,64 @@ +import threading +import socket +import threading +import json +import struct +import dcs.tests.config +import dcs.tests.database as database +from loguru import logger + + +def generate_response(response): + response_binary = json.JSONEncoder().encode(response).encode("utf-8") + response_binary_len = len(response_binary) + response_binary_len_binary = struct.pack("!Q", response_binary_len) + response_binary = response_binary_len_binary + response_binary + + return response_binary + + +class Urh(threading.Thread): + def __init__(self, request_map: dict, client_socket: 'socket.socket'): + super().__init__() + self.request_map = request_map + self.client_socket = client_socket + + def report_state(self, state): + logger.info(f"[REQUEST] report free") + if self.request_map['spider_info'] not in dcs.tests.config.get_free_spiders(): + dcs.tests.config.add_free_spider(self.request_map['spider_info']) + response = { + 'report_free': 'success marked ' + str(self.request_map['spider_info']) + } + self.client_socket.sendall(generate_response(response)) + logger.info(f"[RESPONSE] report free: {response['report_free']}") + + def login(self, user, password): + logger.info(f"[REQUEST] login") + database.mysql_conn() + response = database.login(user, password) + response = { + 'login': response + } + self.client_socket.sendall(generate_response(response)) + logger.info(f"[RESPONSE] login: {response['login']}") + + def register(self, user, password): + logger.info(f"[REQUEST] register") + database.mysql_conn() + response = database.register(user, password) + response = { + 'register': response + } + self.client_socket.sendall(generate_response(response)) + logger.info(f"[RESPONSE] register: {response['register']}") + + def run(self) -> None: + if self.request_map['action'] == 'report_free': + self.report_state('free') + elif self.request_map['action'] == 'login': + self.login(self.request_map['user'], self.request_map['password']) + elif self.request_map['action'] == 'register': + self.register(self.request_map['user'], self.request_map['password']) + else: + self.client_socket.close()