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的Supervisor进行进程监控以及自动启动
May 29 Python
Python操作列表之List.insert()方法的使用
May 20 Python
从源码解析Python的Flask框架中request对象的用法
Jun 02 Python
Django权限机制实现代码详解
Feb 05 Python
python实现转圈打印矩阵
Mar 02 Python
Python发展简史 Python来历
May 14 Python
python2与python3爬虫中get与post对比解析
Sep 18 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
May 23 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 Python
Python用Jira库来操作Jira
Dec 28 Python
python中xlutils库用法浅析
Dec 29 Python
在PyCharm中安装PaddlePaddle的方法
Feb 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制作简单的内容采集器的代码
2007/11/28 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
php curl登陆qq后获取用户信息时证书错误
2015/02/03 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
PHP count()函数讲解
2019/02/03 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
一些技巧性实用js代码小结
2009/10/14 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
window.print打印指定div指定网页指定区域的方法
2014/08/04 Javascript
详解Bootstrap插件
2016/04/25 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
vue中利用Promise封装jsonp并调取数据
2019/06/18 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
HTML的form表单和django的form表单
2019/07/25 Python
Django中的用户身份验证示例详解
2019/08/07 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
高中生校园生活自我评价
2013/09/19 职场文书
艺术设计专业个人求职信
2013/09/21 职场文书
物流管理专业职业生涯规划书
2014/01/06 职场文书
大四学生思想汇报
2014/01/13 职场文书
企业业务员岗位职责
2014/03/14 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
诚信高考倡议书
2019/06/24 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书