Python 实现简易HTTP服务器

Tyrant 2019年01月27日 •  Python 78 •  0

Python 实现简易HTTP服务器

深入了解http协议的话,从底层看就是socket套接字通信利用一个规定的协议去发送和接收消息,再根据浏览器的解析将数据显示在前台页面,核心就是socket通信,所以http服务器的模拟就很容易了,原理就是这样,接下来直接上代码,代码需要你把自己的网站文件放在与http_server.py同一目录下的html目录中才能运行成功:

1.源码

http_server.py

''' 实现简单的http服务器,多进程版 '''
import socket
import re
import multiprocessing

def service_client(new_socket):
   # 接收浏览器发送过来的请求,也就是http请求
   request = new_socket.recv(1024).decode("utf-8")
   # 将request头部拆分,并采用正则将请求的页面解析出来
   request_lines = request.splitlines()
   # 匹配正则
   ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0]).group(1)
   # 如果是根目录直接解析到主页index.html
   if ret == "/":
       ret = "/index.html"   
   try:
       # 打开文件
       f = open("./html" + ret, "rb") 
   except:
       response = "HTTP/1.1 404 NOT FOUND"
       response += "\r\n"
       response += "----404 not found----"
       new_socket.send(response.encode("utf-8"))
   else:
       # 回复header
       response = "HTTP/1.1 200 OK\r\n"
       response += "\r\n"
       # 得到body内容
       html_content = f.read()
       f.close()
       # 发送header与body
       new_socket.send(response.encode("utf-8"))
       new_socket.send(html_content)
   # 关闭套接字
   new_socket.close()
def main():
   # 1.创建套接字
   tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

   # 设置选项,让服务器结束之后立即释放资源
   tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

   # 2.绑定
   tcp_server_socket.bind(("", 7709))

   # 3.变为监听套接字
   tcp_server_socket.listen(128)

   # 4.等待新客户端的链接
   while True:

       new_socket, client_addr = tcp_server_socket.accept()

       # 5.为这个客户端服务
       p = multiprocessing.Process(target=service_client, args=(new_socket,))
       p.start()
       new_socket.close()

if __name__ == "__main__":
   main()

2.运行效果

3.Tips

QQ:770925351

Wechat:tc770925351

E-mail:770925351@qq.com

Tags:PythonSOCKETHTTPTCP/IP
上一篇
打赏
下一篇

添加新评论