python静态web服务器实现方法及代码详解

 更新时间:2022年11月20日 11:04:15   投稿:laozhang  
在本篇内容里小编给大家分享了一篇关于python静态web服务器实现方法,有需要的朋友们可以参考下。

1、编写TCP服务器程序。

2、获取浏览器发送的http请求消息数据。

3、读取固定的页面数据,将页面数据组装成HTTP响应消息数据并发送给浏览器。

4、HTTP响应报文数据发送完成后,关闭服务于客户端的套接字。

实例

# 时间: 2021/10/21 20:38
import socket
 
 
if __name__ == '__main__':
    # 创建tcp服务端套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置端口号复用, 程序退出端口立即释放
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 绑定端口号
    tcp_server_socket.bind(("", 8080))
    # 设置监听
    tcp_server_socket.listen(128)
    while True:
        # 等待接受客户端的连接请求
        new_socket, ip_port = tcp_server_socket.accept()
        # 代码执行到此,说明连接建立成功
        recv_client_data = new_socket.recv(4096)
        # 对二进制数据进行解码
        recv_client_content = recv_client_data.decode)
        print(recv_client_content)
        
 
        # 响应行
        response_line = "HTTP/1.1 200 OK\r\n"
        # 响应头
        response_header = "Server: py1.0\r\n"
 
        # 响应体
        response_body = "Hello,guys!"
 
        # 拼接响应报文
        response_data = (response_line + response_header + "\r\n"+ response_body).encode()
        # 发送数据
        new_socket.send(response_data)
 
        # 关闭服务与客户端的套接字
        new_socket.close()

实例扩展:

import socket
import re
import time


def service_client(new_socket):
 """为这个客户端服务"""

 # 1.接收浏览器发送过来的请求,即http请求
 # GET / HTTP/1.1
 # --------
 request = new_socket.recv(1024).decode('utf-8')

 # 判断客户端意外断开链接返回空字符串
 if not request:
  # 关闭套接字并退出
  new_socket.close()
  print("==="*30)
  return

 # 分隔套接字
 request_lines = request.splitlines()
 print()
 print(">"*20)
 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"

 # 2.返回http格式数据 给浏览器
 try:
  f = open("./html" + file_name, "rb")
 except:
  response = "HTTP/1.1 404 NOT FOUND\r\n"
  response += "Content-Type:text/html;charset=utf-8\r\n"
  response += "\r\n"
  response += "<h1>404 not found <br> 没有发现所请求资源</h1>"
  response += str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
  new_socket.send(response.encode('utf-8'))
 else:
  html_content = f.read()
  f.close()
  # 2.1准备发送给浏览器的数据---header
  response = "HTTP/1.1 200 OK\r\n"
  response += "\r\n"
  # 2.2准备发送给浏览器的数据 ---body
  # 将response header发送给浏览器
  new_socket.send(response.encode("utf-8"))
  # 将response body发送给浏览器
  new_socket.send(html_content)

 # 关闭套接字
 new_socket.close()


def main():
 """用来完成整体的控制"""
 # 1.创建套接字
 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 # 端口复用
 tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 # 2.绑定
 tcp_server_socket.bind(("", 7890))
 # 3.变为套接字
 tcp_server_socket.listen(128)

 while True:
  # 4.等待客户端的链接
  new_socket, client_addr = tcp_server_socket.accept()

  print(client_addr)

  # 5.为这个客户端服务
  service_client(new_socket)

 # 关闭监听套接字
 tcp_server_socket.close()


if __name__ == '__main__':
 main()

到此这篇关于python静态web服务器实现方法及代码详解的文章就介绍到这了,更多相关python静态web服务器如何实现内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何基于python实现不邻接植花

    如何基于python实现不邻接植花

    这篇文章主要介绍了如何基于python实现不邻接植花,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 基于PyQt5实现状态栏(statusBar)显示和隐藏功能

    基于PyQt5实现状态栏(statusBar)显示和隐藏功能

    这篇文章主要为大家详细介绍了如何利用PyQt5实现状态栏显示和隐藏功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-08-08
  • 几个提升Python运行效率的方法之间的对比

    几个提升Python运行效率的方法之间的对比

    这篇文章主要介绍了几个提升Python运行效率的方法之间的对比,包括使用Cython和PyPy等这些热门方法,需要的朋友可以参考下
    2015-04-04
  • Python实现读取及写入csv文件的方法示例

    Python实现读取及写入csv文件的方法示例

    这篇文章主要介绍了Python实现读取及写入csv文件的方法,涉及Python针对csv格式文件的读取、遍历、写入等相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • Pytest+Request+Allure+Jenkins实现接口自动化

    Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Python pypinyin注音库轻松丝滑实现汉字转换成拼音

    Python pypinyin注音库轻松丝滑实现汉字转换成拼音

    pypinyin 库,能像功夫熊猫那样,轻松、快捷地帮你把汉字转换成拼音,有了 pypinyin,不仅可以节省宝贵的时间,还可以更准确地展示中文字符的读音,使文化交流更为顺畅,本文带大家一起探索 pypinyin 库的魅力
    2024-01-01
  • pycharm下pyqt4安装及环境配置的教程

    pycharm下pyqt4安装及环境配置的教程

    这篇文章主要介绍了pycharm下pyqt4安装及环境配置的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • python数据XPath使用案例详解

    python数据XPath使用案例详解

    xpath是最常用且最便捷高效的一种解析方式,通用型强,其不仅可以用于python语言中,还可以用于其他语言中,数据解析建议首先xpath
    2021-09-09
  • 浅谈django url请求与数据库连接池的共享问题

    浅谈django url请求与数据库连接池的共享问题

    今天小编就为大家分享一篇浅谈django url请求与数据库连接池的共享问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python的另外几种语言实现

    Python的另外几种语言实现

    这篇文章主要介绍了Python的另外几种语言实现,本文介绍了CPython、Jython、Python for .NET、PyPy、Stackless等其它几种语言实现的Python,需要的朋友可以参考下
    2015-01-01

最新评论