Web动态服务器
来源:互联网 发布:php 输出错误信息 编辑:程序博客网 时间:2024/06/18 00:03
1.新建:03-dynamic_web_server.py
#coding=utf-8import socketimport reimport sysfrom multiprocessing import Process#需求:执行python的动态脚本#常量,所有字母全部大写#设置静态文件根目录HTML_ROOT_DIR="./html"WSGI_PYTHON_DIR="./wsgipython"class HttpServer(object): """""" def __init__(self): self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # self.server_socket.bind(("", port)) def bind(self, port): self.server_socket.bind(("", port)) def start(self): self.server_socket.listen(128) while True: # 返回一个新的客户端的套接字 client_socket, client_address = self.server_socket.accept() # print("[%s,%s]用户连接上了!"%(client_address[0],client_address[1])) print("[%s,%s]用户连接上了!" % client_address) # 新建进程 handle_client_process = Process(target=self.handle_client, args=(client_socket,)) handle_client_process.start() # client套接字关闭 client_socket.close() # 接收状态码,响应头 def start_respone(self, status, headers): server_header = [ ("Server", "My Server") ] response_headers = "HTTP/1.1" + status + "\r\n" for header in headers: response_headers += "%s : %s\r\n" % header # 放在对象里面,方面后续处理 self.response_headers = response_headers def handle_client(self, client_socket): """处理客户端请求""" # 获取客户端请求数据 request_data = client_socket.recv(1024) print("request data:", request_data) request_lines = request_data.splitlines() for line in request_lines: print(line) # 解析请求报文 # 'GET / HTTP/1.1' request_start_line = request_lines[0] # 提取用户请求的文件名 print(request_start_line.decode("utf-8")) file_name = re.match(r"\w+ +(/[^ ]*) ", request_start_line.decode("utf-8")).group(1) method_name = re.match(r"(\w+) +/[^ ]* ", request_start_line.decode("utf-8")).group(1) #"/ctime.py" #"/sayhello.py" if file_name.endswith(".py"): # 动态加载模块,导入py文件,取模块名 m = __import__(file_name[1:-3]) #environ:一个包含所有HTTP请求信息的dict对象 env = { "PATH_INFO":file_name, "METHOD":method_name } #传递self.start_respone的引用,处理函数 response_body = m.application(env, self.start_respone) response = self.response_headers + "\r\n" + response_body else: # 常量写在左边,变量写在右边 if "/" == file_name: file_name = "/index.html" # 打开文件,读取内容 try: file = open(HTML_ROOT_DIR + file_name, "rb") except IOError: # 构造响应数据 response_start_line = "HTTP/1.1 404 NOT FOUND\r\n" response_headers = "Server:My server\r\n" response_body = "The file is not found" else: file_data = file.read() file.close() # 构造响应数据 response_start_line = "HTTP/1.1 200 OK\r\n" response_headers = "Server:My server\r\n" response_body = file_data.decode("utf-8") finally: # 形成响应报文 response = response_start_line + response_headers + "\r\n" + response_body print("response data:", response) # 注意编码问题 # 向客户端返回响应数据 client_socket.send(bytes(response, "utf-8")) # 关闭客户端socket连接 client_socket.close()def main(): #动态加载路径 sys.path.insert(1,WSGI_PYTHON_DIR) http_server=HttpServer() http_server.bind(8000) http_server.start()if __name__=="__main__": main()
2.新建wsgipython目录,同时在目录里面,新建ctime.py文件
#coding=utf-8import time#"/ctime.py?timezone=8"def application(env,start_response): env={ } # env.get("Method") # env.get("PATH_INFO") # env.get("QUERY_STRING") #起始行 status="200 OK" #响应头 headers = [ ("Content-Type", "text/plain") ] start_response(status,headers) return time.ctime()
阅读全文
0 0
- java web 动态服务器
- Web动态服务器
- uCLinux Web服务器 动态Web技术 CGI
- Servlet容器-web服务器基本原理(动态)
- web-ajax动态获取服务器日志变化
- 动态创建 Web 服务器控件模板
- 动态WEB服务器配置与管理
- S2jsp 动态网页开发基础 web服务器
- 动态创建 ASP.NET Web 服务器控件模板
- 动态设置 GridView Web 服务器控件列宽
- 动态设置 GridView Web 服务器控件列宽
- 高性能动态Web服务器的一些探讨
- nginx,apache web服务器支持POST动态下载文件
- 关于Web服务器与动态网页的一些思考
- Apache 与Tomcat 服务器联合搭建一个稳定,动态,高效的web服务器
- Web资源介绍、静态资源和动态资源的区别、Web服务器种类汇总
- Web资源介绍、静态资源和动态资源的区别、Web服务器种类汇总
- WEB服务器
- 模拟实现内存操作函数memcpy、memmove
- 关于快排
- 53道Java线程面试题
- 81. Search in Rotated Sorted Array II
- 解决Linux终端下文件名或标准输出乱码
- Web动态服务器
- vector的初始化
- firewalld关于zone的操作
- 69道Spring面试题和答案
- SJTU OJ 1558 最长序列问题
- C++拷贝构造函数可以访问传入对象的private成员变量
- Linux中安装及常用操作命令
- SDNU__1175.开心的金明
- 关于Vue父子组件之间的通信