python----web开发
-
接收web服务器的动态资源请求,给web服务器提供处理动态资源请求的服务。
-
2. 动态资源判断
-
根据请求资源路径进行判断
web服务器程序(web.py)代码:
import socket
import threading
import sys
import framework
# 获取用户请求资源的路径
# 根据请求资源的路径,读取指定文件的数据
# 组装指定文件数据的响应报文,发送给浏览器
# 判断请求的文件在服务端不存在,组装404状态的响应报文,发送给浏览器
class HttpWebServer:
def __init__(self):
# 1.编写一个TCP服务端程序
# 创建socekt
self.tcp_server_socekt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置端口复用
self.tcp_server_socekt.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 绑定地址
self.tcp_server_socekt.bind(("", 8000))
# 设置监听
self.tcp_server_socekt.listen(128)
def handle_client_request(self, client_socekt):
# 获取浏览器的请求信息
client_request_data = client_socekt.recv(1024).decode()
# 获取用户请求信息
request_data = client_request_data.split("\r\n")
# 获取请求行数据
request_line = request_data.pop(0) # 使用pop将请求行数据从列表中取出
request_line_data = request_line.split(' ')
# 获取请求头部数据
request_header = {}
for data in request_data:
if data == '':
continue
request_header[data.split(": ")[0]]=data.split(": ")[1]
# 判断客户端是否关闭
if len(request_line_data) == 1:
client_socekt.close()
return
# 请求行中获取请求资源的路径
request_path = request_line_data[1]
# 判断是否有查询字符串数据
request_query = request_path.split('?')
if len(request_query) > 1:
request_path = request_query[0]
query_str = request_query[1]
else:
query_str = None
# 构造请求数据
requests = {
'path':request_path,
'query_str':query_str,
'header':request_header
}
"""动态资源"""
# 符合wsgi协议的参数
env = {
"request_path":request_path,
"requests":requests
}
# 应答行
response_line = "HTTP/1.1 200 OK\r\n"
# 应答头
response_header = "Server:pwb\r\nAccess-Control-Allow-Credentials:true\r\nAccess-Control-Allow-Origin:*\r\nAccess-Control-Allow-Methods:GET, POST, PUT\n\rAccess-Control-Allow-Headers:X-Custom-Header"
# 应答体
response_body =framework.handle_request(env)
# 应答数据
response_data = response_line + response_header + "\r\n\r\n" + response_body
