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实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 Python
Python的Django框架中从url中捕捉文本的方法
Jul 20 Python
python自动12306抢票软件实现代码
Feb 24 Python
实用自动化运维Python脚本分享
Jun 04 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
详解如何管理多个Python版本和虚拟环境
May 10 Python
python自动生成model文件过程详解
Nov 02 Python
Python实现新型冠状病毒传播模型及预测代码实例
Feb 05 Python
python mysql中in参数化说明
Jun 05 Python
如何利用pycharm进行代码更新比较
Nov 04 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 Python
Python实现智慧校园自动评教全新版
Jun 18 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上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
PHP实现删除非站内外部链接实例代码
2014/06/17 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
jquery等待效果示例
2014/05/01 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
JavaScript修改作用域外变量的方法
2016/03/25 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
Java及python正则表达式详解
2017/12/27 Python
python 实现登录网页的操作方法
2018/05/11 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
对python判断是否回文数的实例详解
2019/02/08 Python
Django组件content-type使用方法详解
2019/07/19 Python
python获取array中指定元素的示例
2019/11/26 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
会计专业导师推荐信
2014/03/08 职场文书
学校学习雷锋活动总结
2014/07/03 职场文书
实习单位指导教师评语
2014/12/30 职场文书
机器人总动员观后感
2015/06/09 职场文书
开票证明
2015/06/23 职场文书
校长新学期致辞
2015/07/30 职场文书
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android