python实现简易web多进程静态服务器

淩亂°似流年 2022-06-08 04:18 345阅读 0赞

利用python实现了静态web服务器,可以利用浏览器进行测试。

  1. #-*- coding:utf-8 -*-
  2. from socket import *
  3. from multiprocessing import *
  4. import re
  5. #多进程式并发web服务器
  6. #表示html文件的所存在的目录
  7. HTML_ROOT_DIR = "./html"
  8. def dealWithClient(clientSocket):
  9. #接收消息
  10. request_data = clientSocket.recv(1024)
  11. if request_data:
  12. #print(request_data.decode('utf-8'))
  13. #按行进行分割
  14. request = request_data.splitlines()
  15. for line in request:
  16. #输出每行数据
  17. print(line.decode('utf-8'))
  18. request_head = request[0]
  19. #利用正则表达式进行匹配,提取出请求的文件名
  20. filename = re.match(r"\w+\s+(/[^ ]*)\s", request_head.decode('utf-8')).group(1)
  21. #输出文件名
  22. print(filename)
  23. else:
  24. print("none")
  25. if filename == "/":
  26. #如果文件名为通配符,则令其等于index.html即主页 表示默认连接主页
  27. filename = "/index.html"
  28. try:
  29. #打开文件 以二进制方式读取(可能包含图片)
  30. file = open(HTML_ROOT_DIR + filename, "rb")
  31. except IOError :
  32. #如果产生错误,即文件不存在,则返回错误的状态码
  33. response_head = "HTTP/1.1 404 NOT FOUND \r\n"
  34. #状态码
  35. response_sever = "Sever:my sever \r\n"
  36. response_body = "this page is not found \r\n"
  37. else:
  38. #如果能打开文件,则读取信息
  39. file_data = file.read()
  40. #记得关闭文件
  41. file.close()
  42. response_head = "HTTP/1.1 200 OK \r\n"
  43. #状态码
  44. response_sever = "Sever:my sever \r\n"
  45. response_body = file_data.decode('utf-8')
  46. response = response_head + response_sever + "\r\n" + response_body
  47. print("response data:", response)
  48. clientSocket.send(bytes(response, 'utf-8'))
  49. clientSocket.close()
  50. def main():
  51. #建立套接字
  52. severSocket = socket(AF_INET, SOCK_STREAM)
  53. localAddr = ("", 7788)
  54. #绑定
  55. severSocket.bind(localAddr)
  56. #监听
  57. severSocket.listen(15)
  58. while True:
  59. #接收用户套接字
  60. clientSocket, clientAddr = severSocket.accept()
  61. #创建进程
  62. p = Process(target = dealWithClient, args = (clientSocket,))
  63. p.start()
  64. clientSocket.close()
  65. severSocket.close()
  66. if __name__ == '__main__':
  67. main()

根目录下有html文件夹,里面有index.html文件,供客户端请求使用,即为主页。index.html文件如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>My Web</title>
  6. </head>
  7. <body>
  8. <h1>HI</h1>
  9. <p>welcome</p>
  10. </body>
  11. </html>

即为一个简单的html文档。
在浏览器中输入:

http://127.0.0.1/:7788

即可访问index.html。实现了简单的get方法。

发表评论

表情:
评论列表 (有 0 条评论,345人围观)

还没有评论,来说两句吧...

相关阅读