我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python本地搭建静态Web服务器的实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python本地搭建静态Web服务器的实现

静态Web服务器-返回固定页面数据

学习目标

能够写出组装固定页面数据的响应报文

1. 开发自己的静态Web服务器

实现步骤:

  • 编写一个TCP服务端程序
  • 获取浏览器发送的http请求报文数据
  • 读取固定页面数据,把页面数据组装成HTTP响应报文数据发送给浏览器。
  • HTTP响应报文数据发送完成以后,关闭服务于客户端的套接字。

2. 静态Web服务器-返回固定页面数据的示例代码

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(("", 8000))
    # 设置监听
    tcp_server_socket.listen(128)
    # 循环等待接受客户端的连接请求
    while True:
        # 等待接受客户端的连接请求
        new_socket, ip_port = tcp_server_socket.accept()
        # 代码执行到此,说明连接建立成功
        # 接收客户端的请求信息
        recv_data = new_socket.recv(4096)
        print(recv_data)

        # 打开文件读取文件中的数据
        with open("static/index.html", "r") as file:  # 这里的file表示打开文件的对象
            file_data = file.read()
        # 提示: with open 关闭文件这步操作不用程序员来完成,系统帮我们来完成

        # 响应行
        response_line = "HTTP/1.1 200 OK\r\n"
        # 响应头
        response_header = "Server: PWS/1.0\r\n"
        # 响应体
        response_body = file_data

        # 把数据封装成http 响应报文格式的数据
        response = response_line + response_header + "\r\n" + response_body
        # 把字符串编码成二进制
        response_data = response.encode("utf-8")
        # 发送给浏览器的响应报文数据
        new_socket.send(response_data)
        # 关闭服务于客户端的套接字
        new_socket.close()

3. 小结

编写一个TCP服务端程序

tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 循环接受客户端的连接请求
while True:
   conn_socket, ip_port = tcp_server_socket.accept()

获取浏览器发送的http请求报文数据

client_request_data = conn_socket.recv(4096)

读取固定页面数据,把页面数据组装成HTTP响应报文数据发送给浏览器。

response_data = (response_line + response_header + "\r\n").encode("utf-8") + response_body

conn_socket.send(response_data)

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

conn_socket.close()

静态Web服务器-返回指定页面数据

学习目标

能够写出组装指定页面数据的响应报文

1. 静态Web服务器的问题

目前的Web服务器,不管用户访问什么页面,返回的都是固定页面的数据,接下来需要根据用户的请求返回指定页面的数据

返回指定页面数据的实现步骤:

  • 获取用户请求资源的路径
  • 根据请求资源的路径,读取指定文件的数据
  • 组装指定文件数据的响应报文,发送给浏览器
  • 判断请求的文件在服务端不存在,组装404状态的响应报文,发送给浏览器

2. 静态Web服务器-返回指定页面数据的示例代码

import socket
import os


def 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(("", 8000))
    # 设置监听
    tcp_server_socket.listen(128)
    # 循环等待接受客户端的连接请求
    while True:
        # 等待接受客户端的连接请求
        new_socket, ip_port = tcp_server_socket.accept()
        # 代码执行到此,说明连接建立成功
        # 接收客户端的请求信息
        recv_data = new_socket.recv(4096)
        # 判断接收的数据长度是否为0
        if len(recv_data) == 0:
            new_socket.close()
            return

        # 对二进制数据进行解码
        recv_content = recv_data.decode("utf-8")
        print(recv_content)

        # 对数据按照空格进行分割
        request_list = recv_content.split(" ", maxsplit=2)
        # 获取请求的资源路径
        request_path = request_list[1]
        print(request_path)

        # 判断请求的是否是根目录,如果是根目录设置返回的信息
        if request_path == "/":
            request_path = "/index.html"

        # 1. os.path.exits
        # os.path.exists("static/" + request_path)
        # 2. try-except

        # 打开文件读取文件中的数据, 提示:这里使用rb模式,兼容打开图片文件
        with open("static" + request_path, "rb") as file:  # 这里的file表示打开文件的对象
            file_data = file.read()
        # 提示: with open 关闭文件这步操作不用程序员来完成,系统帮我们来完成

        # 代码执行到此,说明文件存在,返回200状态信息
        # 响应行
        response_line = "HTTP/1.1 200 OK\r\n"
        # 响应头
        response_header = "Server: PWS/1.0\r\n"
        # 响应体
        response_body = file_data

        # 把数据封装成http 响应报文格式的数据
        response = (response_line +
                    response_header +
                    "\r\n").encode("utf-8") + response_body

        # 发送给浏览器的响应报文数据
        new_socket.send(response)

        # 关闭服务于客户端的套接字
        new_socket.close()


# 判断是否是主模块的代码
if __name__ == '__main__':
    main()
    

3. 小结

获取用户请求资源的路径

request_list = client_request_conent.split(" ",  maxsplit=2)
request_path = request_list[1]

根据请求资源的路径,读取请求指定文件的数据

with open("static" + request_path, "rb") as file:
 	file_data = file.read()

组装指定文件数据的响应报文,发送给浏览器

response_data = (response_line + response_header + "\r\n").encode("utf-8") + response_body
conn_socket.send(response_data)

判断请求的文件在服务端不存在,组装404状态的响应报文,发送给浏览器

try:
	# 打开指定文件,代码省略...
except Exception as e:
   conn_socket.send(404响应报文数据)

静态Web服务器-返回404页面数据

import socket
import os


def 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(("", 8000))
    # 设置监听
    tcp_server_socket.listen(128)
    # 循环等待接受客户端的连接请求
    while True:
        # 等待接受客户端的连接请求
        new_socket, ip_port = tcp_server_socket.accept()
        # 代码执行到此,说明连接建立成功
        # 接收客户端的请求信息
        recv_data = new_socket.recv(4096)
        # 判断接收的数据长度是否为0
        if len(recv_data) == 0:
            new_socket.close()
            return

        # 对二进制数据进行解码
        recv_content = recv_data.decode("utf-8")
        print(recv_content)

        # 对数据按照空格进行分割
        request_list = recv_content.split(" ", maxsplit=2)
        # 获取请求的资源路径
        request_path = request_list[1]
        print(request_path)

        # 判断请求的是否是根目录,如果是根目录设置返回的信息
        if request_path == "/":
            request_path = "/index.html"

        # 1. os.path.exits
        # os.path.exists("static/" + request_path)
        # 2. try-except

        try:
            # 打开文件读取文件中的数据, 提示:这里使用rb模式,兼容打开图片文件
            with open("static" + request_path, "rb") as file:  # 这里的file表示打开文件的对象
                file_data = file.read()
            # 提示: with open 关闭文件这步操作不用程序员来完成,系统帮我们来完成
        except Exception as e:
            # 代码执行到此,说明没有请求的该文件,返回404状态信息
            # 响应行
            response_line = "HTTP/1.1 404 Not Found\r\n"
            # 响应头
            response_header = "Server: PWS/1.0\r\n"
            # 读取404页面数据
            with open("static/error.html", "rb") as file:
                file_data = file.read()

            # 响应体
            response_body = file_data

            # 把数据封装成http 响应报文格式的数据
            response = (response_line +
                        response_header +
                        "\r\n").encode("utf-8") + response_body

            # 发送给浏览器的响应报文数据
            new_socket.send(response)

        else:
            # 代码执行到此,说明文件存在,返回200状态信息
            # 响应行
            response_line = "HTTP/1.1 200 OK\r\n"
            # 响应头
            response_header = "Server: PWS/1.0\r\n"
            # 响应体
            response_body = file_data

            # 把数据封装成http 响应报文格式的数据
            response = (response_line +
                        response_header +
                        "\r\n").encode("utf-8") + response_body

            # 发送给浏览器的响应报文数据
            new_socket.send(response)
        finally:
            # 关闭服务于客户端的套接字
            new_socket.close()


# 判断是否是主模块的代码
if __name__ == '__main__':

    main()
    

到此这篇关于Python本地搭建静态Web服务器的实现的文章就介绍到这了,更多相关Python本地搭建静态Web服务器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python本地搭建静态Web服务器的实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python本地搭建静态Web服务器的实现

本文主要介绍了Python本地搭建静态Web服务器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-01

Centos8搭建本地Web服务器的实现步骤

1 概述 系统centos8,利用httpd搭建本地web服务器. 2 安装httpdsudo yum install -y httpd3 启动服务 service ht
2022-06-04

python静态web服务器如何实现

今天小编给大家分享一下python静态web服务器如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、编写TCP服务器
2023-07-04

nodejs web本地服务器搭建

随着web技术的不断发展,越来越多的人开始关注如何搭建一个本地的web服务器,以方便他们进行开发和测试工作。而Node.js作为一款非常流行的服务器端开发框架,也可以用于搭建web本地服务器。本文将介绍如何使用Node.js来搭建一个简单的web本地服务器,以及如何运行和管理该服务器。1. 安装Node.js在开始之前,需要安装Node.js。如果您尚未安装,请前往Node.j
2023-05-17

python搭建本地服务器

python搭建本地服务器python3以上版本'python3 -m http.server 8000'默认是8000端口,可以指定端口,打开浏览器输入http://127.0.0.1:8000即可访问目录下的所有文件。这个命令平时敲起来
2023-01-30

Python多任务版静态Web服务器如何实现

这篇“Python多任务版静态Web服务器如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python多任务版静态We
2023-07-02

CentOS搭建web服务器的动态缓存与静态资源优化

在CentOS上搭建Web服务器时,可以采取以下措施来进行动态缓存和静态资源优化:1. 使用缓存插件:安装和配置缓存插件,如Varnish或Nginx的反向代理缓存,可以将动态内容缓存起来,减少对后端服务器的请求压力。这些插件可以将频繁请求
2023-10-10

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

在本篇内容里小编给大家分享了一篇关于python静态web服务器实现方法,有需要的朋友们可以参考下。
2022-11-21

webpack-dev-server搭建本地服务器的实现方法

本篇内容介绍了“webpack-dev-server搭建本地服务器的实现方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录前言webpa
2023-06-20

nodejs构建本地web测试服务器 如何解决访问静态资源问题

直接打开html文件,是以file:///方式打开的,这种方式很多时候会遇到跨域的问题,因此我们一般会搭建一个简易的本地服务器,来运行测试页面。 一、构建静态服务器 1、使用express模块 建立个js文件,命名server,内容代码如下
2022-06-04

搭建本地云服务器的步骤

1.确定服务器需求在搭建本地云服务器之前,首先需要确定你的服务器需求。考虑以下几个因素:-预算:确定你的预算范围,以便选择适合的硬件和软件。-服务器规模:确定你需要的服务器规模,包括处理器、内存、存储空间等。-服务器用途:确定你的服务器将用于什么目的,例如网站托管、应用程序开发、数据库管理等。2.选择硬件和操作系统根据
搭建本地云服务器的步骤
2023-10-28

Nodejs实现的一个静态服务器实例

参考cnodejs.org上面的静态服务器例子,写了下面的一个nodejs静态服务器例子,里面包含cache,压缩,贴代码如下:/*** 静态文件服务器测试例子* User: xuwm* Date: 13-5-17* Time: 上午8:3
2022-06-04

本地搭建svn服务器及TortoiseSVN的基本使用

文章目录 一、首先准备三个软件:二、安装及使用1.VisualSVN-Server-5.1.1-x64.msi(svn服务端)一、创建新的存储库二、创建用户Users三、添加一个组—groups四、修改一下项目的配置文件五、本地访问
2023-08-30

搭建本地云服务器的网页端口

1.选择合适的操作系统在搭建本地云服务器之前,首先需要选择适合的操作系统。常见的选择包括Linux、WindowsServer等。根据自己的需求和熟悉程度选择一个合适的操作系统。2.安装和配置Web服务器搭建网页端口需要安装和配置一个Web服务器。常见的选择包括Apache、Nginx等。以下是一个基本的安装和配置步骤:步骤一:安装Web服务器使用操作系统的包管理器安装所选的Web服务器。例如,在Ubuntu上安装Apache可以使用以下命令...
2023-10-27

编程热搜

目录