Python探索之实现一个简单的HTTP服务器


Posted in Python onOctober 28, 2017

Python标准库中的BaseHTTPServer模块实现了一个基础的HTTP服务器基类和HTTP请求处理类。这在文章python探索之BaseHTTPServer-实现Web服务器介绍中进行了相关的介绍。然而,BaseHTTPServer模块中并没有定义相关的请求方法,诸如GET、HEAD、POST等。在BaseHTTPServer模块的基础上,Python标准库中的SimpleHTTPServer模块实现了简单的GET、HEAD请求。

在该模块中,它沿用了BaseHTTPServer模块中实现的HTTPServer服务器,这里就不再赘述。而请求处理类则是继承了BaseHTTPServer模块中的BaseHTTPRequestHandler类。SimpleHTTPServer模块实现了具有GET、HEAD请求方法的HTTP通信服务。根据文章python探索之BaseHTTPServer-实现Web服务器介绍中的介绍,只需要在请求处理类中定义do_GET()和do_HEAD()方法即可。

do_GET()

do_GET()方法的源码如下:

def do_GET(self):
 """Serve a GET request."""
 f = self.send_head()
 if f:
  try:
   self.copyfile(f, self.wfile)
  finally:
   f.close()

在这个方法中,它调用了send_head()方法来返回一个响应。send_head()方法会调用send_response()、send_header()、send_error()方法等设置响应报文等。

do_HEAD()

do_HEAD()方法的源码如下:

def do_HEAD(self):
 """Serve a HEAD request."""
 f = self.send_head()
 if f:
  f.close()

do_HEAD()方法和do_GET()方法的实现类似。

测试例子

SimpleHTTPServer模块还提供了一个测试函数。只需要在命令行中运行如下代码:

python SimpleHTTPServer.py # SimpleHTTPServer.py指代Python标准库中的SimpleHTTPServer模块,注意文件位置。

如果在本地环境中运行以上代码,将会调用请求处理类的translate_path和list_directory方法展示一个文件目录。
然后在浏览器中访问127.0.0.1:8000即可查看SimpleHTTPServer.py文件所在目录下的所有文件。

总结

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

Python 相关文章推荐
python Django框架实现自定义表单提交
Mar 25 Python
wxpython中自定义事件的实现与使用方法分析
Jul 21 Python
详解如何使用Python编写vim插件
Nov 28 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
linux下python使用sendmail发送邮件
May 22 Python
使用pandas对两个dataframe进行join的实例
Jun 08 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
Jul 10 Python
Python time库基本使用方法分析
Dec 13 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
Oct 18 Python
利用Python实现自动扫雷小脚本
Dec 17 Python
深度学习小工程练习之垃圾分类详解
Apr 14 Python
python中filter,map,reduce的作用
Jun 10 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
Python探索之静态方法和类方法的区别详解
Oct 27 #Python
You might like
php微信开发之带参数二维码的使用
2016/08/03 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
2016/05/26 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
从零学习node.js之模块规范(一)
2017/02/21 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
python操作CouchDB的方法
2014/10/08 Python
为python设置socket代理的方法
2015/01/14 Python
python使用nntp读取新闻组内容的方法
2015/05/08 Python
python 循环遍历字典元素的简单方法
2016/09/11 Python
Python性能提升之延迟初始化
2016/12/04 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
Python AES加密实例解析
2018/01/18 Python
python实现最长公共子序列
2018/05/22 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
Python如何使用函数做字典的值
2019/11/30 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
JAVA和C++区别都有哪些
2015/03/30 面试题
英文简历中的自我评价用语
2013/12/09 职场文书
小学生优秀评语大全
2014/04/22 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书