python网络-静态Web服务器案例(29)
一、静态Web服务器案例代码static_web_server.py
- # coding:utf-8
- # 导入socket模块
- import socket
- # 导入正则表达式模块
- import re
- # 导入多进程模块
- from multiprocessing import Process
- # 设置静态文件根目录
- HTML_ROOT_DIR = "./html"
- # 定义个一个HTTPServer的类
- class HTTPServer(object):
- """"""
- # 初始化方法
- def __init__(self):
- # 创建一个服务器socket套接字
- self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- # socket地址重用配置
- self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- # HTTPServer开启的方法
- def start(self):
- # 设置监听字节长度为128
- self.server_socket.listen(128)
- # 不间断的监听是否有人链接服务器
- while True:
- # 解析请求链接服务器的客户端信息
- client_socket, client_address = self.server_socket.accept()
- print("[%s:%s]用户连接上了" % client_address)
- # 创建多进程handle_client处理客户端的请求
- handle_client_process = Process(target=self.handle_client, args=(client_socket,))
- # 开启多进程
- handle_client_process.start()
- # 关闭客户端socket套接字
- client_socket.close()
- # 多进程handle_client
- def handle_client(self, client_socket):
- """处理客户端请求"""
- # 获取客户端数据
- request_data = client_socket.recv(1024)
- print("request data:", request_data)
- # 多请求数据用空格做分割处理
- request_headers_lines = request_data.splitlines()
- for line in request_headers_lines:
- print(line)
- # 解析请求报文
- request_start_line = request_headers_lines[0]
- # 利用正则表达式提取用户请求的文件名
- file_name = re.match(r"\w+ +(/[^ ]*) ", request_start_line.decode("utf-8")).group(1)
- print(file_name)
- if "/" == file_name:
- file_name = "/index.html"
- # 打开文件 ,读取内容
- try:
- file = open(HTML_ROOT_DIR + file_name, "rb")
- except IOError:
- # 设置打开文件失败时返回的响应起始行\r\n是换行
- response_start_line = "HTTP/1.1 404 Not Found\r\n"
- # 设置打开文件失败时返回的响应头
- response_headers = "Server:My server\r\n"
- # 设置打开文件失败时返回的响应体
- response_body = "The File is not found"
- else:
- # 打开成功时读取的客户端要请求的文件数据
- file_data = file.read()
- # 关闭文件
- file.close()
- # 构造响应数据
- response_start_line = "HTTP/1.1 200 OK\r\n"
- # 构造响应头
- response_headers = "Server:My server\r\n"
- # 构造响应体
- response_body = file_data.decode("utf-8")
- response = response_start_line + response_headers + "\r\n" + response_body
- print("response data:", response)
- # 向客户端返回响应数据
- client_socket.send(bytes(response, "utf-8"))
- # 关闭客户端连接
- client_socket.close()
- # 绑定端口
- def bind(self, port):
- self.server_socket.bind(("", port))
- def main():
- # 创建HTTPServer对象
- http_server = HTTPServer()
- # 绑定端口
- http_server.bind(8000)
- # 开启服务
- http_server.start()
- if __name__ == "__main__":
- main()
二、index.html代码
说明:index.html在html文件夹中,html文件夹和static_web_server.py在同目录
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>My web</title>
- </head>
- <body>
- <h1>Se7eN_HOU</h1>
- </body>
- </html>
三、浏览器运行效果
四、说明
在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,所以:
HTML是一种用来定义网页的文本,会HTML,就可以编写网页;
HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信
python网络-静态Web服务器案例(29)的更多相关文章
- python网络-动态Web服务器案例(30)
一.浏览器请求HTML页面的过程 了解了HTTP协议和HTML文档,其实就明白了一个Web应用的本质就是: 浏览器发送一个HTTP请求: 服务器收到请求,生成一个HTML文档: 服务器把HTML文档作 ...
- Python之HTTP静态Web服务器开发
众所周知,Http协议是基于Tcp协议的基础上产生的浏览器到服务器的通信协议 ,其根本原理也是通过socket进行通信. 使用HTTP协议通信,需要注意其返回的响应报文格式不能有任何问题. 响应报文, ...
- 04-HTTP协议和静态Web服务器
一.HTTP协议(HyperText Transfer Protocol) 超文本传输协议,超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片.音乐.视频.超链接等等都属于超文本. ...
- python 启动简单web服务器
有时我们在开发web静态页面时,需要一个web服务器来测试. 这时可以利用python提供的web服务器来实现. 1.在命令行下进入某个目录 2.在该目录下运行命令: python -m Simple ...
- 用HTTP核心模块配置一个静态Web服务器
静态Web服务器的主要功能由ngx_http_core_module模块(HTTP框架的主要成员)实现与core模块类似,可以根据相关模块(如ngx_http_gzip_filter_module.n ...
- Harp – 内置常用预处理器的静态 Web 服务器
Harp 是一个基于 Node.js 平台的静态 Web 服务器,内置流行的预处理器,支持把 Jade, Markdown, EJS, Less, Stylus, Sass, and CoffeeSc ...
- 超简易静态Web服务器
使用 HttpListener 写的一个超简易静态Web服务器 开发环境:VS2010 + .NET2.0 http://files.cnblogs.com/zjfree/EasyIIS.rar
- Fenix – 基于 Node.js 的桌面静态 Web 服务器
Fenix 是一个提供给开发人员使用的简单的桌面静态 Web 服务器,基于 Node.js 开发.您可以同时在上面运行任意数量的项目,特别适合前端开发人员使用. 您可以通过免费的 Node.js 控制 ...
- node 创建静态web服务器(下)(处理异步获取数据的两种方式)
接上一章. 上一章我们说创建的静态web服务器只能识别html,css,js文件,功能较为单一,且图片格式为text/html,这是不合理的. 本章,我们将解决该问题. 这里,我们先准备好一个json ...
随机推荐
- Python虚拟环境Virtualen简单使用
安装pip 使用脚本安装和升级pip 要安装或升级pip,需要下载 get-pip.py. 地址:https://bootstrap.pypa.io/get-pip.py 然后运行以下命令 (需要管理 ...
- flask,scrapy,django信号
简介 Django.Flask.scrapy都包含了一个“信号分配器”,使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒. 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒 ...
- GhostScript说明
关于ghostscript(以下简称gs).Gs是一个地下工作者,一般用户不熟悉它,因为它上不和用户直接打交道,下不直接接触打印机.但是在打印工作中它却扮演了极为重要的解色. 一般从用户常见文件如图片 ...
- Appium移动端测试--搭建测试环境
目录 文章目录如下 安装Android Studio及Android SDK 更改VDM默认存储路径 通过npm安装Appium Server 启动Appium GUI模式 Appium连接会话 Ap ...
- docekr安装mysql,redis,git和maven 脚本
编写脚本 images_install.sh #!/bin/bash # author:qiao # 安装脚本 # reids:3.2(自启) mysql:5.7(自启)或者JDK:1.8 tomca ...
- SAS学习笔记62 通过压缩变量长度来实现数据集压缩
有时候从其他数据库过来的字符型变量Length很长,导致数据集文件很大,可以通过压缩变量长度来实现数据集压缩 具体思路: LENGTH语句设置所有变量真实长度 SET数据集的时候对原有变量进行RENA ...
- Java多线程编程之读写锁【ReentrantReadWriteLock】
有时候我们需要有这样的需求: 对于同一个文件进行读和写操作,普通的锁是互斥的,这样读的时候会加锁,只能单线程的读,我们希望多线程的进行读操作,并且读的时候不能进行写操作,写的时候不能进行 ...
- [清晰] kubernets权威指南第2版
------ 郑重声明 --------- 资源来自网络,纯粹共享交流, 如果喜欢,请您务必支持正版!! --------------------------------------------- 下 ...
- ubuntu 18.04安装RTX 2060 显卡驱动
第一:安装ppa的显卡驱动源 sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update 第二:检查显卡和推荐驱动 ubuntu- ...
- iOS - 安装CocoaPods详细过程(重装系统后!)
重装的系统,发现很多东西都要重装,顺便复习和检验下以前的方法还有没有效 一.简介 什么是CocoaPods CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们 ...