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 paramiko实现ssh远程访问的方法
Dec 03 Python
用Python中的字典来处理索引统计的方法
May 05 Python
Python while、for、生成器、列表推导等语句的执行效率测试
Jun 03 Python
Python中int()函数的用法浅析
Oct 17 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 Python
Python中pip更新和三方插件安装说明
Jul 08 Python
Flask框架钩子函数功能与用法分析
Aug 02 Python
python3.6生成器yield用法实例分析
Aug 23 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 Python
深入浅析python 中的self和cls的区别
Jun 20 Python
手残删除python之后的补救方法
Jun 26 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中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
如何在PHP中读写文件
2020/09/07 PHP
11款基于Javascript的文件管理器
2009/10/25 Javascript
jQuery中的.bind()、.live()和.delegate()之间区别分析
2011/06/08 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
js同源策略详解
2015/05/21 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
Bootstrap模态框插件使用详解
2017/05/11 Javascript
JS实现图片预加载之无序预加载功能代码
2017/05/12 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
2018/06/09 jQuery
axios异步提交表单数据的几种方法
2019/08/11 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
2020/05/26 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
[01:01:43]EG vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python中列表与元组的乘法操作示例
2018/02/10 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
使用keras实现Precise, Recall, F1-socre方式
2020/06/15 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
.NET面试题:什么是反射
2016/09/30 面试题
为什么要用EJB
2014/04/17 面试题
垃圾桶标语
2014/06/24 职场文书
文艺晚会开场白
2015/05/29 职场文书
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript