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使用scrapy采集数据时为每个请求随机分配user-agent的方法
Apr 08 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
python实现输入数字的连续加减方法
Jun 22 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
Feb 08 Python
使用Python自动化破解自定义字体混淆信息的方法实例
Feb 13 Python
Python中那些 Pythonic的写法详解
Jul 02 Python
Python爬虫程序架构和运行流程原理解析
Mar 09 Python
基于Python的OCR实现示例
Apr 03 Python
Python CategoricalDtype自定义排序实现原理解析
Sep 11 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 Python
Python 如何安装Selenium
May 06 Python
浅谈Python响应式类库RxPy
Jun 14 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
建立文件交换功能的脚本(三)
2006/10/09 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
详解AngularJS2 Http服务
2017/06/26 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
Python数据分析matplotlib设置多个子图的间距方法
2018/08/03 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
pygame实现简易飞机大战
2018/09/11 Python
python爬取网易云音乐评论
2018/11/16 Python
Html5移动端适配IphoneX等机型的方法
2019/06/25 HTML / CSS
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
保安自我鉴定范文
2013/12/08 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
2015年调度员工作总结
2015/04/30 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android