|
Python内置的web静态服务器Python内置的`http.server`模块可以快速启动一个简单的HTTP服务器。在Python3中,打开命令行或终端,在你想要作为静态服务器根目录的文件夹下,运行以下命令:python-mhttp.server8000 这将会在当前目录启动一个HTTP服务器,监听端口8000,端口可以随意指定。你可以在浏览器中访问`http://localhost:8000`查看目录内容。示例:浏览器访问静态资源 http://localhost:9000Python搭建属于自己的web静态服务器方式一:使用sockettcp自己编码的方式。#server.pyimportsocket#sockettcpimportthreading#多线程importsys#获取命令行输入参数classHttpWerServer:#初始化TCP套接字,默认端口8000def__init__(self,port=8000):#创建tcp服务端套接字server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#设置端口号复用server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)#绑定端口号,ip不指定表示使用本机ipserver_socket.bind(("",port))#设置监听server_socket.listen(128)self.server_socket=server_socket@staticmethoddefhandle_client(client_socket):#接收客户端的请求信息recv_data=client_socket.recv(4096)#判断接收的数据长度是否为0iflen(recv_data)==0:client_socket.close()return#对二进制数据进行解码recv_content=recv_data.decode("utf-8")print(recv_content)#对数据按照空格进行分割,为了拿到资源名称,例如:/abc.htmlrequest_list=recv_content.split("",maxsplit=2)#获取请求的资源路径request_path=request_list[1]print(request_path)#判断请求的是否是根目录,如果是根目录设置返回的信息ifrequest_path=="/":request_path="/index.html"#1.判断文件是否存在方式一:os.path.exits#os.path.exists("static/"+request_path)#2.判断文件是否存在方式二:try-excepttry:#打开文件读取文件中的数据,提示:这里使用rb模式,兼容打开图片文件withopen("static"+request_path,"rb")asfile:file_data=file.read()#提示:withopen关闭文件这步操作不用程序员来完成,系统帮我们来完成exceptFileNotFoundErrorase:#文件不存在异常,返回404#代码执行到此,说明没有请求的该文件,返回404状态信息#响应行response_line="HTTP/1.1404NotFound\r\n"#响应头response_header="ServerWS/1.0\r\n"#读取404页面数据withopen("static/error.html","rb")asfile:file_data=file.read()#响应体response_body=file_data#把数据封装成http响应报文格式的数据response=(response_line+response_header+"\r\n").encode("utf-8")+response_body#发送给浏览器的响应报文数据client_socket.send(response)else:#代码执行到此,说明文件存在,返回200状态信息#响应行response_line="HTTP/1.1200OK\r\n"#响应头response_header="ServerWS/1.0\r\n"#响应体response_body=file_data#把数据封装成http响应报文格式的数据response=(response_line+response_header+"\r\n").encode("utf-8")+response_body#发送给浏览器的响应报文数据client_socket.send(response)finally:#关闭服务于客户端的套接字client_socket.close()defstart(self):print("静态web服务器启动...")#循环等待接受客户端的连接请求whileTrue:#等待接受客户端的连接请求client_socket,client_address=self.server_socket.accept()#使用多线程处理多客户端的连接client_thread=threading.Thread(target=self.handle_client,args=(client_socket,))#把客户端线程设置为守护线程client_thread.daemon=True#启动子线程client_thread.start()defmain():#获取命令行输入的参数iflen(sys.argv)>2:#命令行只能带一个参数print(f"用法:python{__name__}
")sys.exit(1)eliflen(sys.argv)==2andnotsys.argv[1].isdigit():#参数只能是数字类型print(f"error:无效的int值:{sys.argv[1]}")sys.exit(1)eliflen(sys.argv)==1:#没有带参数web_server=HttpWerServer()web_server.start()else:#带一个参数web_server=HttpWerServer(int(sys.argv[1]))web_server.start()#判断是否是主模块的代码if__name__=='__main__':main()命令行执行以下命令pythonserver.py#端口省略不写默认8000浏览器访问静态资源 http://localhost:9000方式二:使用http.server模块来创建自己的服务器脚本。#server.pyimporthttp.serverimportsocketserverPORT=8000Handler=http.server.SimpleHTTPRequestHandlerwithsocketserver.TCPServer(("",PORT),Handler)ashttpd:print("servingatport",PORT)httpd.serve_forever()在Python3中,打开命令行或终端,服务根目录在脚本所在目录,运行以下命令:pythonserver.py
|
|