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 相关文章推荐
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
Jan 19 Python
Python实现的百度站长自动URL提交小工具
Jun 27 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
Mar 12 Python
Python实现螺旋矩阵的填充算法示例
Dec 28 Python
Python实现获取邮箱内容并解析的方法示例
Jun 16 Python
Python实现在某个数组中查找一个值的算法示例
Jun 27 Python
基于python3实现socket文件传输和校验
Jul 28 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
Python Django 命名空间模式的实现
Aug 09 Python
pandas数据处理进阶详解
Oct 11 Python
python使用bs4爬取boss直聘静态页面
Oct 10 Python
基于Django集成CAS实现流程详解
Nov 28 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
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
php之对抗Web扫描器的脚本技巧
2008/10/01 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
2011/02/14 Javascript
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
浅谈Vue.js
2017/03/02 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
用JS实现选项卡
2020/03/23 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
跟老齐学Python之关于类的初步认识
2014/10/11 Python
详解python时间模块中的datetime模块
2016/01/13 Python
python super函数使用方法详解
2020/02/14 Python
室内设计实习自我鉴定
2013/09/25 职场文书
党员思想汇报范文
2013/12/30 职场文书
舞蹈毕业生的自我评价
2014/03/05 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
2014年志愿者工作总结
2014/11/20 职场文书
小学生作文评语集锦
2014/12/25 职场文书
2015年城管个人工作总结范文
2015/04/20 职场文书
早上好问候语大全
2015/11/10 职场文书