主要使用python實現了一個http服務器。http服務器實現了用戶的注冊和登錄的簡單功能,當然還可以繼續擴展。
數據的存儲使用的是文件,有興趣的話可以使用數據庫進行存儲。當然根據個人興趣而定。
本記錄主要是為了自己后面進行查閱,並給有需要的人提供方便,拋磚引玉。如果浪費了大家的時間也請多多關照。
- 進程啟動代碼
1 from ChttpServer import CHttpServer 2 def main(): 3 http_server = CHttpServer.CHttpServer() 4 http_server.bind(8000) 5 http_server.start() 6 7 if __name__ == "__main__": 8 main()
2.http服務器實現類
1 import socket 2 import sys 3 import re 4 from multiprocessing import Process 5 class CHttpServer(object): 6 """Httpserver服務端類""" 7 def __init__(self): 8 self.m_serverSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 9 self.m_serverSocket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 10 def start(self): 11 self.m_serverSocket.listen(128) 12 while(True): 13 m_clientSocket,m_clientAddr = self.m_serverSocket.accept() 14 print('[%s,%s]用戶連接上了服務器' % m_clientAddr) 15 handle_client_process = Process(target = self.handle_client,args=(m_clientSocket,)) 16 handle_client_process.start() 17 m_clientSocket.close() 18 #數據處理進程 19 def handle_client(self,clientSocket): 20 ''' 21 處理客戶請求操作 22 ''' 23 #獲取客戶請求數據 24 request_data = clientSocket.recv(1024) 25 #print('接收到的數據:%s' % request_data) 26 request_lines=request_data.splitlines() 27 #print(len(request_lines)) 28 strlist=[] 29 for line in request_lines: 30 strlist=str(line).split('&') 31 if len(strlist) > 1: 32 break 33 #print(strlist[1:5]) 34 userinfolist = strlist[1:3] 35 user_info='&'.join(userinfolist) 36 #print(userinfolist) 37 #用戶名&密碼&操作類型&來源 38 #解析請求報文 39 ''' 40 報文協議格式:clientparam=&username&pwd&method&type&. 41 type:0 注冊 1登錄 42 ''' 43 file_data='' 44 response_body='' 45 response='' 46 response_start_line = "HTTP/1.1 200 OK\r\n" 47 response_headers = "Server: My server\r\n" 48 if strlist[3]=='1':#注冊 49 """寫注冊文件""" 50 fp = open('userinfo.txt','a+') 51 52 fp.write(user_info) 53 fp.write('\n') 54 fp.close() 55 file_data=r'<b>恭喜您,注冊成功:'+ (strlist[1]+'</b>') 56 response_body = file_data 57 response = response_start_line + response_headers + "\r\n" + response_body 58 elif strlist[3]=='2': #登錄 59 """登錄系統""" 60 fp = open('userinfo.txt','r') 61 for line in fp.readlines(): 62 if line.replace('\n','') == user_info.replace('\n',''): 63 #print(user_info) 64 file_data=r'<b>恭喜您,登錄成功:'+ (strlist[1]+'</b>') 65 response_body = file_data 66 response = response_start_line + response_headers + "\r\n" + response_body 67 break 68 # 向客戶端返回 響應數據 69 fp.close() 70 elif strlist[3]=='3': #重置密碼 71 pass 72 else: 73 file_data=r'非法操作' 74 response_body = file_data 75 response = response_start_line + response_headers + "\r\n" + response_body 76 print('發送的數據[%s]' % response) 77 clientSocket.send(bytes(response, "gbk")) 78 #組裝返回包 79 def start_response(self,status,headers): 80 response_headers = "HTTP/1.1 " + status + "\r\n" 81 for header in headers: 82 response_headers += "%s: %s\r\n" % header 83 self.response_headers = response_headers 84 #綁定端口 85 def bind(self,port): 86 self.m_serverSocket.bind(('',port)) 87 def parseline(self,strcon): 88 """解析字符串""" 89 pass
3、運行情況
測試命令:http://127.0.0.1:8000/&jifei&123456&2&0&