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 不以科学计数法输出的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Flask处理POST请求的教程指南

    Flask处理POST请求的教程指南

    Flask处理POST请求的过程是一个相对直接且灵活的过程,它允许开发者根据需求接收、处理并响应客户端发送的数据,以下是对Flask如何处理POST请求的详细简述,需要的朋友可以参考下
    2024-10-10
  • Python脚本实现虾米网签到功能

    Python脚本实现虾米网签到功能

    这篇文章主要介绍了Python脚本实现虾米网签到功能的方法,涉及Python调用URL模块实现数据传输与处理的相关技巧,需要的朋友可以参考下
    2016-04-04
  • Python中的字典类型详解

    Python中的字典类型详解

    在Python中,字典是一种无序且可变的数据类型,用于存储键值对数据,字典可以根据键(key)来快速检索对应的值,相比于其他类型的容器,如列表(List)、元组等,字典具有更高效的查找和插入性能,因此在Python编程中被广泛使用
    2023-06-06
  • Django model.py表单设置默认值允许为空的操作

    Django model.py表单设置默认值允许为空的操作

    这篇文章主要介绍了Django model.py表单设置默认值允许为空的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 用Python将PDF文件转存为图片的实现方法

    用Python将PDF文件转存为图片的实现方法

    在Python中,将PDF文件转换为图片格式使用专门的库来处理PDF文档,并将其每一页导出为常见的图像格式,这可以通过PyMuPDF库中的fitz模块或pdf2image库实现,本文给大家介绍了用Python将PDF文件转存为图片的方法,需要的朋友可以参考下
    2024-04-04
  • Python 的 f-string 可以连接字符串与数字的原因解析

    Python 的 f-string 可以连接字符串与数字的原因解析

    这篇文章主要介绍了Python 的 f-string 可以连接字符串与数字的原因解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • python 提取key 为中文的json 串方法

    python 提取key 为中文的json 串方法

    今天小编就为大家分享一篇python 提取key 为中文的json 串方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python:type、object、class与内置类型实例

    Python:type、object、class与内置类型实例

    今天小编就为大家分享一篇Python:type、object、class与内置类型实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 使用Python脚本来控制Windows Azure的简单教程

    使用Python脚本来控制Windows Azure的简单教程

    这篇文章主要介绍了使用Python脚本来控制Windows Azure的简单教程,由于微软官方提供了Python SDK,使得用户自己用Python控制Azure成为了可能,需要的朋友可以参考下
    2015-04-04

最新评论