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 相关文章推荐
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
Jan 23 Python
对Python的Django框架中的项目进行单元测试的方法
Apr 11 Python
Python 中的 else详解
Apr 23 Python
Python单链表简单实现代码
Apr 27 Python
python添加模块搜索路径方法
Sep 11 Python
详解基于django实现的webssh简单例子
Jul 17 Python
python os.path模块常用方法实例详解
Sep 16 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
PyCharm下载和安装详细步骤
Dec 17 Python
浅谈django 模型类使用save()方法的好处与注意事项
Mar 28 Python
Pytorch之扩充tensor的操作
Mar 04 Python
python 调用js的四种方式
Apr 11 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
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
php 代码优化之经典示例
2011/03/24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
PHP实现简单的计算器
2020/08/28 PHP
JS解密入门 最终变量劫持
2008/06/25 Javascript
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
JS Testing Properties 判断属性是否在对象里的方法
2017/10/01 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
vue实现图片上传到后台
2020/06/29 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
python对数组进行反转的方法
2015/05/20 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
python实现canny边缘检测
2020/09/14 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
H5页面适配iPhoneX(就是那么简单)
2019/12/02 HTML / CSS
黄河的主人教学反思
2014/02/07 职场文书
聚美优品的广告词
2014/03/14 职场文书
残疾人小组计划书
2014/04/27 职场文书
秋季运动会广播稿(30篇)
2014/09/13 职场文书
2014年食堂工作总结
2014/11/20 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
2022/04/11 PHP
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python