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统计文件行数示例分享
Feb 21 Python
Python操作列表之List.insert()方法的使用
May 20 Python
JPype实现在python中调用JAVA的实例
Jul 19 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
PyCharm代码回滚,恢复历史版本的解决方法
Oct 22 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
python实现从本地摄像头和网络摄像头截取图片功能
Jul 11 Python
python实现用户名密码校验
Mar 18 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
Python爬虫基于lxml解决数据编码乱码问题
Jul 31 Python
python的链表基础知识点
Sep 13 Python
python用tkinter实现一个gui的翻译工具
Oct 26 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 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
处理php自动反斜杠的函数代码
2010/01/05 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
php fread读取文件注意事项
2016/09/24 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
2019/10/11 Javascript
python与php实现分割文件代码
2017/03/06 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
PyTorch中permute的用法详解
2019/12/30 Python
python代码中怎么换行
2020/06/17 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
CPB肌肤之钥美国官网:Clé de Peau Beauté
2017/09/05 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
人力资源部经理岗位职责规定
2014/02/23 职场文书
白酒市场营销方案
2014/02/25 职场文书
学校志愿者活动总结
2014/06/27 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
大学生学期个人总结
2015/02/12 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
python实现的web监控系统
2021/04/27 Python
Python中使用ipython的详细教程
2021/06/22 Python
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL