找回密码
 会员注册
查看: 22|回复: 0

Python学习篇]Python搭建静态web服务器

[复制链接]

5

主题

0

回帖

16

积分

新手上路

积分
16
发表于 2024-9-7 13:54:11 | 显示全部楼层 |阅读模式
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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 22:50 , Processed in 0.781167 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表