Python 实现一个简单的web服务器


Posted in Python onJanuary 03, 2021
import re
import socket


def service_cilent(new_socket):
  request = new_socket.recv(1024).decode("utf-8")
  # Python splitlines() 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
  request_lines = request.splitlines()
  print(request_lines)
  file_name = ""
  ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])
  if ret:
    file_name = ret.group(1)
    if file_name == "/":
      file_name = "index.html"
  try:
    f = open(file_name, "rb")
  except:
    response = "HTTP/1.1 404 NOT FOUND\r\n\r\n"
    response += "------file not found-----"
    new_socket.send(response.encode("utf-8"))
  else:
    # 打开文件成功就读文件 然后关闭文件指针
    html_content = f.read()
    f.close()
    # 准备发送给浏览器的数据---header
    response = "HTTP/1.1 200 OK\r\n\r\n"
    # 将response header发送给浏览器
    new_socket.send(response.encode("utf-8"))
    # 将response body发送给浏览器
    new_socket.send(html_content)
  # 关闭套接字
  new_socket.close()


def main():
  # 创建套接字
  tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  # 绑定
  tcp_server_socket.bind(("", 7089))
  # 监听套接字
  tcp_server_socket.listen(128)
  while True:
    new_socket, cilent_addr = tcp_server_socket.accept()
    service_cilent(new_socket)
  # 关闭监听套接字
  tcp_server_socket.close()


if __name__ == '__main__':
  main()

以上就是Python 实现一个简单的web服务器的详细内容,更多关于python 实现web服务器的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
Oct 23 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
Mar 30 Python
解决python爬虫中有中文的url问题
May 11 Python
详解Python if-elif-else知识点
Jun 11 Python
Python错误处理操作示例
Jul 18 Python
Python 使用list和tuple+条件判断详解
Jul 30 Python
python实现梯度下降法
Mar 24 Python
Django自关联实现多级联动查询实例
May 19 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
总结python 三种常见的内存泄漏场景
Nov 20 Python
教你使用pyinstaller打包Python教程
May 27 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 Python
关于Python错误重试方法总结
Jan 03 #Python
详解python中的异常和文件读写
Jan 03 #Python
python绘制雷达图实例讲解
Jan 03 #Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
Jan 01 #Python
python安装mysql的依赖包mysql-python操作
Jan 01 #Python
python UDF 实现对csv批量md5加密操作
Jan 01 #Python
安装python依赖包psycopg2来调用postgresql的操作
Jan 01 #Python
You might like
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
javascript 面向对象编程基础:继承
2009/08/21 Javascript
javascript 一些用法小结
2009/09/11 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
详解使用mocha对webpack打包的项目进行"冒烟测试"的大致流程
2020/04/27 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
python控制台显示时钟的示例
2014/02/24 Python
简单介绍Python中的len()函数的使用
2015/04/07 Python
python使用KNN算法手写体识别
2018/02/01 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
2018/04/28 Python
Python中的Django基本命令实例详解
2018/07/15 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
Python中os模块功能与用法详解
2020/02/26 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
keras多显卡训练方式
2020/06/10 Python
python 实现简易的记事本
2020/11/30 Python
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
全球知名旅游社区巴西站点:TripAdvisor巴西
2016/07/21 全球购物
找工作最新求职信
2013/12/22 职场文书
幼儿园小班教师寄语
2014/04/03 职场文书
十佳护士先进事迹
2014/05/08 职场文书
新学期标语
2014/06/30 职场文书