一、静态Web服务器案例代码static_web_server.py

  1. # coding:utf-8
  2.  
  3. # 导入socket模块
  4. import socket
  5. # 导入正则表达式模块
  6. import re
  7. # 导入多进程模块
  8. from multiprocessing import Process
  9.  
  10. # 设置静态文件根目录
  11. HTML_ROOT_DIR = "./html"
  12.  
  13. # 定义个一个HTTPServer的类
  14. class HTTPServer(object):
  15. """"""
  16.  
  17. # 初始化方法
  18. def __init__(self):
  19. # 创建一个服务器socket套接字
  20. self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  21. # socket地址重用配置
  22. self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  23.  
  24. # HTTPServer开启的方法
  25. def start(self):
  26. # 设置监听字节长度为128
  27. self.server_socket.listen(128)
  28. # 不间断的监听是否有人链接服务器
  29. while True:
  30. # 解析请求链接服务器的客户端信息
  31. client_socket, client_address = self.server_socket.accept()
  32. print("[%s:%s]用户连接上了" % client_address)
  33. # 创建多进程handle_client处理客户端的请求
  34. handle_client_process = Process(target=self.handle_client, args=(client_socket,))
  35. # 开启多进程
  36. handle_client_process.start()
  37. # 关闭客户端socket套接字
  38. client_socket.close()
  39.  
  40. # 多进程handle_client
  41. def handle_client(self, client_socket):
  42. """处理客户端请求"""
  43. # 获取客户端数据
  44. request_data = client_socket.recv(1024)
  45.  
  46. print("request data:", request_data)
  47. # 多请求数据用空格做分割处理
  48. request_headers_lines = request_data.splitlines()
  49. for line in request_headers_lines:
  50. print(line)
  51.  
  52. # 解析请求报文
  53. request_start_line = request_headers_lines[0]
  54.  
  55. # 利用正则表达式提取用户请求的文件名
  56. file_name = re.match(r"\w+ +(/[^ ]*) ", request_start_line.decode("utf-8")).group(1)
  57. print(file_name)
  58. if "/" == file_name:
  59. file_name = "/index.html"
  60.  
  61. # 打开文件 ,读取内容
  62. try:
  63. file = open(HTML_ROOT_DIR + file_name, "rb")
  64. except IOError:
  65. # 设置打开文件失败时返回的响应起始行\r\n是换行
  66. response_start_line = "HTTP/1.1 404 Not Found\r\n"
  67. # 设置打开文件失败时返回的响应头
  68. response_headers = "Server:My server\r\n"
  69. # 设置打开文件失败时返回的响应体
  70. response_body = "The File is not found"
  71. else:
  72. # 打开成功时读取的客户端要请求的文件数据
  73. file_data = file.read()
  74. # 关闭文件
  75. file.close()
  76.  
  77. # 构造响应数据
  78. response_start_line = "HTTP/1.1 200 OK\r\n"
  79. # 构造响应头
  80. response_headers = "Server:My server\r\n"
  81. # 构造响应体
  82. response_body = file_data.decode("utf-8")
  83.  
  84. response = response_start_line + response_headers + "\r\n" + response_body
  85. print("response data:", response)
  86.  
  87. # 向客户端返回响应数据
  88. client_socket.send(bytes(response, "utf-8"))
  89.  
  90. # 关闭客户端连接
  91. client_socket.close()
  92.  
  93. # 绑定端口
  94. def bind(self, port):
  95. self.server_socket.bind(("", port))
  96.  
  97. def main():
  98. # 创建HTTPServer对象
  99. http_server = HTTPServer()
  100. # 绑定端口
  101. http_server.bind(8000)
  102. # 开启服务
  103. http_server.start()
  104.  
  105. if __name__ == "__main__":
  106. main()

二、index.html代码

说明:index.html在html文件夹中,html文件夹和static_web_server.py在同目录

  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>Se7eN_HOU</h1>
  9. </body>
  10. </html>

三、浏览器运行效果

四、说明

在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,所以:

  • HTML是一种用来定义网页的文本,会HTML,就可以编写网页;

  • HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信

python网络-静态Web服务器案例(29)的更多相关文章

  1. python网络-动态Web服务器案例(30)

    一.浏览器请求HTML页面的过程 了解了HTTP协议和HTML文档,其实就明白了一个Web应用的本质就是: 浏览器发送一个HTTP请求: 服务器收到请求,生成一个HTML文档: 服务器把HTML文档作 ...

  2. Python之HTTP静态Web服务器开发

    众所周知,Http协议是基于Tcp协议的基础上产生的浏览器到服务器的通信协议 ,其根本原理也是通过socket进行通信. 使用HTTP协议通信,需要注意其返回的响应报文格式不能有任何问题. 响应报文, ...

  3. 04-HTTP协议和静态Web服务器

    一.HTTP协议(HyperText Transfer Protocol)     超文本传输协议,超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片.音乐.视频.超链接等等都属于超文本. ...

  4. python 启动简单web服务器

    有时我们在开发web静态页面时,需要一个web服务器来测试. 这时可以利用python提供的web服务器来实现. 1.在命令行下进入某个目录 2.在该目录下运行命令: python -m Simple ...

  5. 用HTTP核心模块配置一个静态Web服务器

    静态Web服务器的主要功能由ngx_http_core_module模块(HTTP框架的主要成员)实现与core模块类似,可以根据相关模块(如ngx_http_gzip_filter_module.n ...

  6. Harp – 内置常用预处理器的静态 Web 服务器

    Harp 是一个基于 Node.js 平台的静态 Web 服务器,内置流行的预处理器,支持把 Jade, Markdown, EJS, Less, Stylus, Sass, and CoffeeSc ...

  7. 超简易静态Web服务器

    使用 HttpListener 写的一个超简易静态Web服务器 开发环境:VS2010 + .NET2.0 http://files.cnblogs.com/zjfree/EasyIIS.rar

  8. Fenix – 基于 Node.js 的桌面静态 Web 服务器

    Fenix 是一个提供给开发人员使用的简单的桌面静态 Web 服务器,基于 Node.js 开发.您可以同时在上面运行任意数量的项目,特别适合前端开发人员使用. 您可以通过免费的 Node.js 控制 ...

  9. node 创建静态web服务器(下)(处理异步获取数据的两种方式)

    接上一章. 上一章我们说创建的静态web服务器只能识别html,css,js文件,功能较为单一,且图片格式为text/html,这是不合理的. 本章,我们将解决该问题. 这里,我们先准备好一个json ...

随机推荐

  1. Python虚拟环境Virtualen简单使用

    安装pip 使用脚本安装和升级pip 要安装或升级pip,需要下载 get-pip.py. 地址:https://bootstrap.pypa.io/get-pip.py 然后运行以下命令 (需要管理 ...

  2. flask,scrapy,django信号

    简介 Django.Flask.scrapy都包含了一个“信号分配器”,使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒. 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒 ...

  3. GhostScript说明

    关于ghostscript(以下简称gs).Gs是一个地下工作者,一般用户不熟悉它,因为它上不和用户直接打交道,下不直接接触打印机.但是在打印工作中它却扮演了极为重要的解色. 一般从用户常见文件如图片 ...

  4. Appium移动端测试--搭建测试环境

    目录 文章目录如下 安装Android Studio及Android SDK 更改VDM默认存储路径 通过npm安装Appium Server 启动Appium GUI模式 Appium连接会话 Ap ...

  5. docekr安装mysql,redis,git和maven 脚本

    编写脚本 images_install.sh #!/bin/bash # author:qiao # 安装脚本 # reids:3.2(自启) mysql:5.7(自启)或者JDK:1.8 tomca ...

  6. SAS学习笔记62 通过压缩变量长度来实现数据集压缩

    有时候从其他数据库过来的字符型变量Length很长,导致数据集文件很大,可以通过压缩变量长度来实现数据集压缩 具体思路: LENGTH语句设置所有变量真实长度 SET数据集的时候对原有变量进行RENA ...

  7. Java多线程编程之读写锁【ReentrantReadWriteLock】

    有时候我们需要有这样的需求:        对于同一个文件进行读和写操作,普通的锁是互斥的,这样读的时候会加锁,只能单线程的读,我们希望多线程的进行读操作,并且读的时候不能进行写操作,写的时候不能进行 ...

  8. [清晰] kubernets权威指南第2版

    ------ 郑重声明 --------- 资源来自网络,纯粹共享交流, 如果喜欢,请您务必支持正版!! --------------------------------------------- 下 ...

  9. ubuntu 18.04安装RTX 2060 显卡驱动

    第一:安装ppa的显卡驱动源 sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update 第二:检查显卡和推荐驱动 ubuntu- ...

  10. iOS - 安装CocoaPods详细过程(重装系统后!)

    重装的系统,发现很多东西都要重装,顺便复习和检验下以前的方法还有没有效 一.简介 什么是CocoaPods CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们 ...