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代码依赖的库的实现代码
Aug 09 Python
Python的包管理器pip更换软件源的方法详解
Jun 20 Python
python解析基于xml格式的日志文件
Feb 25 Python
python实现折半查找和归并排序算法
Apr 14 Python
python for循环输入一个矩阵的实例
Nov 14 Python
python编写微信公众号首图思路详解
Dec 13 Python
Python实现CNN的多通道输入实例
Jan 17 Python
Python函数__new__及__init__作用及区别解析
Aug 31 Python
Python Selenium库的基本使用教程
Jan 04 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 Python
python利用pandas分析学生期末成绩实例代码
Jul 09 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
Apr 08 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中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
2013/06/28 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
优化WordPress的Google字体以加速国内服务器上的运行
2015/11/24 PHP
PHP针对redis常用操作实例详解
2019/08/17 PHP
js获取input标签的输入值实现代码
2013/08/05 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
2015/03/03 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
关于Python中异常(Exception)的汇总
2017/01/18 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
2019/12/23 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
应届生幼儿园求职信
2013/11/12 职场文书
酒店总经理工作职责
2013/12/13 职场文书
毕业生自荐书
2014/02/02 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
Pandas搭配lambda组合使用详解
2022/01/22 Python
全网非常详细的pytest配置文件
2022/07/15 Python