python探索之BaseHTTPServer-实现Web服务器介绍


Posted in Python onOctober 28, 2017

在Python探索之SocketServer详解中我们介绍了Python标准库中的SocketServer模块,了解了要实现网络通信服务,就要构建一个服务器类和请求处理类。同时,该模块还为我们创建了不同的服务器类和请求处理类。

1.服务器类

BaseServer
TCPServer(BaseServer)
UDPServer(TCPServer)
UnixStreamServer
UnixDatagramServer

2.请求处理类

BaseRequestHandler
StreamRequestHandler(BaseRequestHandler)
DatagramRequestHandler(BaseRequestHandler)

通过服务器类和请求处理类的搭配,我们可以创建不同类型的服务器,实现不同的协议类型。本文介绍的BaseHTTPServer模块便是继承TCPServer和StreamRequestHandler,实现了Web服务器的通信。

HTTP服务器

HTTP服务器继承自SocketServer模块中的TCPServer类。它的定义非常简单,只是重写了其中的一个方法。

class HTTPServer(SocketServer.TCPServer):
  allow_reuse_address = 1  # Seems to make sense in testing environment
  def server_bind(self):
    """Override server_bind to store the server name."""
    SocketServer.TCPServer.server_bind(self)
    host, port = self.socket.getsockname()[:2]
    self.server_name = socket.getfqdn(host)
    self.server_port = port

重写的server_bind()方法主要是为了获取服务器名和端口。其余方法以及服务器的实现过程详见Python探索之SocketServer详解

此外,还可以从SocketServer模块中引入'mix-in'类,基于HTTPServer创建支持进程或线程的服务器。

HTTP请求处理基类

为了处理HTTP请求,BaseHTTPServer模块构造了HTTP请求处理基类BaseHTTPRequestHandler,它继承自SocketServer模块中的StreamRequestHandler类。

HTTP请求处理基类中有一些重要的方法:

1.handle() ——这个方法是请求处理类真正处理请求具体工作的方法,例如解析到来的请求,处理数据,并发回响应等。在BaseHTTPRequestHandler中它是一个入口文件,将调用其他的方法完成请求处理。

2.handle_one_request() ——由handle()调用,用于处理请求。其主要工作包括:

调用parse_request()方法,解析请求,获取请求报文中的信息,包括请求的方法、请求URL、请求的HTTP版本号、请求首部等。如果解析失败,则调用send_error()方法发回一个错误响应。

调用do_SPAM() 方法。这个方法中的SPAM指代GET、POST、HEAD等请求方法,需要在请求处理类中构建具体的请求处理方法,例如do_GET处理GET请求,do_POST处理POST请求。do_SPAM() 方法可以调用send_response()、send_header()、end_headers()等方法创建响应首行和响应首部等内容。

3.parse_request() ——解析请求。

4.send_error() ——发回错误响应。

5.send_response() ——创建响应首行和响应首部等内容。

6.send_header() ——设置响应首部内容。

7.end_headers() ——调用此方法可以在首部后增加一个空行,表示首部内容结束(不适用于HTTP/0.9)

8.还包括其他的一些辅助函数。

需要注意的是:BaseHTTPRequestHandler是HTTP请求处理的基类,并不包含诸如do_GET、do_POST等方法,其他继承该类的请求处理类需要自己实现这些方法,已完成对具体请求的处理。对此,可以参考SimpleHTTPServer模块,也可查看文章Python探索之实现一个简单的HTTP服务器。

总结

以上就是本文关于python探索之BaseHTTPServer-实现Web服务器介绍的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Python探索之URL Dispatcher实例详解、Python编程之Re模块下的函数介绍等,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
详解Python命令行解析工具Argparse
Apr 20 Python
Python面向对象编程中关于类和方法的学习笔记
Jun 30 Python
python3+PyQt5使用数据库窗口视图
Apr 24 Python
python 处理string到hex脚本的方法
Oct 26 Python
Python3之不使用第三方变量,实现交换两个变量的值
Jun 26 Python
Python字典中的值为列表或字典的构造实例
Dec 16 Python
如何使用python实现模拟鼠标点击
Jan 06 Python
python range实例用法分享
Feb 06 Python
Python生成器实现简单"生产者消费者"模型代码实例
Mar 27 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
Jun 02 Python
python中函数返回多个结果的实例方法
Dec 16 Python
python 爬取吉首大学网站成绩单
Jun 02 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 #Python
Python探索之SocketServer详解
Oct 28 #Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 #Python
Pandas探索之高性能函数eval和query解析
Oct 28 #Python
Python探索之URL Dispatcher实例详解
Oct 28 #Python
Python探索之Metaclass初步了解
Oct 28 #Python
Python编程之Re模块下的函数介绍
Oct 28 #Python
You might like
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
分享php分页的功能模块
2015/06/16 PHP
PHP获取数组中指定的一列实例
2017/12/27 PHP
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
2016/07/10 Javascript
解析Javascript单例模式概念与实例
2016/12/05 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
详解vue 组件
2020/06/11 Javascript
vue实现登录拦截
2020/06/29 Javascript
python将ansible配置转为json格式实例代码
2017/05/15 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
Python多项式回归的实现方法
2019/03/11 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
Python requests模块cookie实例解析
2020/04/14 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
html5生成柱状图(条形图)效果的实例代码
2016/03/25 HTML / CSS
建筑设计师岗位职责
2013/11/18 职场文书
校班主任推荐信范文
2013/12/03 职场文书
小学新学期教师寄语
2014/01/18 职场文书
公司授权委托书范文
2014/08/02 职场文书
人事代理委托书
2014/09/27 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
高三毕业感言
2015/07/30 职场文书
Python实战之OpenCV实现猫脸检测
2021/06/26 Python
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android