web后端入门级别!
开发语言:
python3
模块:
gevent os re socket
编辑器:
博主用的 vim
简介:
我们这里是利用了python最基础的知识来实现得网站后端,所以比较容易理解,代码里的”static”是博主本地的文件夹,文件夹内存放了一些html文件和图片,都可以通过ip+文件名来进行访问.
# 导入gevent的monkey模块,破解具有阻塞功能的方法
from gevent import monkey
monkey.patch_all()
import gevent
import os
import re
import socket
class HTTPServer(object):
"""创建服务器类"""
def __init__(self):
# 创建套接字
self.tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 设置端口重用
self.tcp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
# 固定端口号
self.tcp_socket.bind(("", 5566))
# 转换为被动套接字
self.tcp_socket.listen(128)
def deal_request(self,client_socket):
# 接受客户端请求
data = client_socket.recv(4096)
# 分割客户端请求行,请求头
data_list = data.decode().split("\r\n")
# 打印分割完成的列表
print(data_list)
# 匹配请求行内的请求路径
match_str = re.match(r"\w+\s+(\S+)",data_list[0])
# 通过分组获取请求路径
match_str = match_str.group(1)
# 如果为空直接关闭
if not match_str:
client_socket.close()
print("请求错误")
return
# 如果为/默认转换为/index.html
if match_str == "/":
match_str = "/index.html"
try:
# 打开文件 读取内容 关闭文件
file1 = open("static"+match_str,"rb")
file_data = file1.read()
file1.close()
except:
# 如果文件不存在服务器回复404
response_line = "HTTP/1.1 404 NOT FOUND\r\n"
response_header = "Server: bfe/1.0.8.13-sslpol-patch\r\n\r\n"
response_body = response_line + response_header + "404错误"
client_socket.sendall(response_body.encode("gbk"))
else:
# 如果文件存在回复200 并发送文件内容为响应体
response_line = "HTTP/1.1 200 OK\r\n"
response_header = "Server: bfe/1.0.8.13-sslpol-patch\r\n\r\n"
response_body = response_line + response_header
client_socket.sendall(response_body.encode()+file_data)
finally:
# 关闭套接字
client_socket.close()
def run(self):
while True:
# 从等待队列中取出
client_socket, client_ip = self.tcp_socket.accept()
# 创建并启动套接字
son = gevent.spawn(self.deal_request,client_socket)
def main():
# 创建服务器类
server = HTTPServer()
server.run()
if __name__ == "__main__":
main()