python自带静态web服务器搭建代码实现(一)

这篇具有很好参考价值的文章主要介绍了python自带静态web服务器搭建代码实现(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、静态web服务器

静态web法服务器:可为发出请求的浏览器提供静态文档的程序,平时上网浏览的页面都是动态的,而开发的是静态的,页面数据不会发生变化

搭建python自带的静态web服务器

  • 命令:python3 -m http.server 端口号
    • -m:表示运行包里面的模块,执行该命令需进入指定静态文件目录,通过浏览器就能访问对应html文件
    • 端口号若不指定则默认为8000

python自带静态web服务器搭建代码实现(一)

  • 访问:http://127.0.0.1:9000/

浏览器访问搭建的静态web服务器及其通信过程

python自带静态web服务器搭建代码实现(一)

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

静态Web服务器实现步骤

  1. 编写TCP服务端程序
  2. 获取浏览器发送的http请求报文数据
  3. 读取固定数据,将页面数据组装为http响应报文数据发送给浏览器
  4. http响应报文数据发送完后,关闭服务于客户端的套接字

实现代码 

import socket
if __name__ == '__main__':
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)   # 创建TCP服务端套接字
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)   # 设置端口号复用,程序退出端口立即释放
    server_socket.bind(('', 9000))   # 绑定端口号
    server_socket.listen(128)     # 设置监听
    while True:   # 循环接受客户端的连接请求
        comm_socket, ip_port = server_socket.accept()   # 等待接受客户端的连接请求
        recv_data = comm_socket.recv(4096)   # 获取浏览器发送的http请求报文数据
        print('接收到的数据解码后为:', recv_data.decode('utf-8'))
        with open('C:/Users/username/Desktop/ubuntu/file1/1.txt', 'rb') as file:
            file_data = file.read()    # 读取文件数据
        response_line = "HTTP/1.1 200 OK  !!!\r\n"   # 响应行
        response_header = "Server: PWS1.0  # 服务器名称及版本\r\n"   # 响应头
        response_body = file_data    # 响应体
        response_data = (response_line + response_header + '\r\n').encode('utf-8') + response_body   # 将数据组装成HTTP响应报文数据发送给浏览器
        comm_socket.send(response_data)   # 发送响应报文数据至浏览器
        comm_socket.close()    # 关闭服务于客户端的套接字

输出如下

浏览器刷新后输出:
接收到的数据解码后为: GET /file1/1.txt HTTP/1.1
Host: 127.0.0.1:9000
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: csrftoken=1wb7v0r0BQuokJCxRS4JAO2XApvrHXFP90t2PiYb0mz7AwWS0NoKTi0zNaIjOfTl; Hm_lvt_18f619820855042bca58b32408f44de7=1658219884
If-Modified-Since: Sat, 15 Oct 2022 02:36:31 GMT

浏览器响应如下 

python自带静态web服务器搭建代码实现(一)

python自带静态web服务器搭建代码实现(一)

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

实现步骤

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

代码实现

import socket
def main():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)   # 创建TCP服务端套接字
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)   # 设置端口号复用,程序退出端口立即释放
    server_socket.bind(("", 9000))   # 绑定端口号
    server_socket.listen(128)   # 设置监听
    while True:
        comm_socket, ip_port = server_socket.accept()   # 等待接收客户端连接请求
        recv_data = comm_socket.recv(4096)   # 接收请求的二进制数据
        if len(recv_data) == 0 :
            print('未获取到请求数据!')
            comm_socket.close()
            return
        recv_content = recv_data.decode('utf-8')   # 对二进制数据解码
        print('获取到的数据内容为:', recv_content)
        request_list = recv_content.split(" ", maxsplit=2)  # 根据指定字符串进行分割,最大分割次数为2
        request_path = request_list[1]  # 获取请求资源路径
        print('请求路径为:', request_path)
        if request_path == "/":   # 判断请求的是否是根目录,若是则返回首页指定数据
            request_path = "/index.html"
        try:
            with open('C:/Users/username/Desktop/ubuntu' + request_path, 'rb') as file:    # 动态打开指定文件
                file_data = file.read()   # 读取指定文件数据
        except Exception as e:   # 请求异常,资源不存在,返回指定404错误数据
            with open('C:/Users/username/Desktop/ubuntu/error.html', 'rb') as file:   # 打开指定错误文件
                error_data = file.read()   # 读取指定错误数据
            response_line = "HTTP/1.1 404 Not Found!!\r\n"    # 响应行
            response_header = "Server: PWS1.0 服务器名称及版本……\r\n"   # 响应头
            response_body = error_data   # 响应体
            response_data = (response_line + response_header + '\r\n').encode('utf-8') + response_body   # 拼接响应报文
            comm_socket.send(response_data)   # 发送数据给浏览器
        else:
            response_line = "HTTP/1.1 200 OK # 成功!!\r\n"
            response_header = "Server: PWS1.0 # 服务器名称版本!\r\n"
            response_body = file_data
            response_data = (response_line + response_header + '\r\n').encode('utf-8') + response_body
            comm_socket.send(response_data)
        finally:
            comm_socket.close()   # 关闭服务于客户端的套接字
if __name__ == '__main__':
    main()

输出如下

404错误输出:
获取到的数据内容为: GET /ab.txt HTTP/1.1
Host: 127.0.0.1:9000
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: csrftoken=1wb7v0r0BQuokJCxRS4JAO2XApvrHXFP90t2PiYb0mz7AwWS0NoKTi0zNaIjOfTl; Hm_lvt_18f619820855042bca58b32408f44de7=1658219884


请求路径为: /ab.txt
未获取到请求数据!

正确响应输出:
获取到的数据内容为: GET /index.html HTTP/1.1
Host: 127.0.0.1:9000
Connection: keep-alive
……  
…… # 中间部分同错误输出


请求路径为: /index.html
未获取到请求数据!

错误响应

python自带静态web服务器搭建代码实现(一)

正确响应

python自带静态web服务器搭建代码实现(一)  学习导航:http://xqnav.top/文章来源地址https://www.toymoban.com/news/detail-438418.html

到了这里,关于python自带静态web服务器搭建代码实现(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【100天精通python】Day47:python网络编程_Web开发:web服务器,前端基础以及静态服务器

    目录 1  网络编程与web编程 1.1 网络编程 1.2 web编程  1.3 前后端交互的基本原理/

    2024年02月11日
    浏览(35)
  • Python-Python高阶技巧:HTTP协议、静态Web服务器程序开发、循环接收客户端的连接请求

    当前版本号[20231114]。 版本 修改说明 20231114 初版 1.1 网址的概念 网址又称为URL,URL的英文全拼是(Uniform Resoure Locator),表达的意思是 统一资源定位符 ,通俗理解就是网络资源地址。 URL地址:https://www.itcast.com/18/1122/10/E178J2O4000189FH.html 1.2 URL的组成 域名 : IP地址的别名 ,它是用

    2024年02月04日
    浏览(44)
  • 深入浅出Python:从零开始搭建自己的Web服务器

    第一部分:前言与环境准备 1. 前言 随着互联网的发展,越来越多的应用都运行在Web上,而Web服务器则成为了支撑这一切的关键。在本文中,我们将利用Python来创建自己的简易Web服务器。通过这个过程,你不仅可以深入了解Web服务器的工作原理,还能够掌握Python的基础知识。

    2024年02月03日
    浏览(42)
  • windows服务器自带IIS搭建网站并发布公网访问【内网穿透】

    转载自远程源码文章:【IIS搭建网站】本地电脑做服务器搭建web站点并公网访问「内网穿透」 在网上各种教程和介绍中,搭建网页都会借助各种软件的帮助,比如网页运行的Apache和Nginx、数据库软件MySQL和MSSQL之类,为方便用户使用,还出现了XAMPP、PHPStudy、宝塔面板等等一系

    2023年04月11日
    浏览(37)
  • 用Windows自带的Hyper搭建Linux(Centos7)服务器

    首先准备Centos7镜像:下载地址:CentOS Mirrors List   点击任意国内镜像地址进行下载 前提:cpu已经开启虚拟化,win10版本为非家庭版 安装Hyper-V:打开控制面板选择程序,选择程序和功能中的“启动或关闭Windows功能”,勾选Hyper-V后,点击确定后系统会启用并重启系统     

    2024年02月05日
    浏览(43)
  • 〖Web全栈开发③〗—HTTP协议和静态web服务器

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! TCP (Transmission Control Protocol) 是在互联网协议(IP)上的一种基于连接(面向连接)的传输层协议 。数据

    2024年02月05日
    浏览(29)
  • 如何使用Nginx搭建详细的静态文件服务器【经典】

    Nginx是一种强大的Web服务器,可以用于托管静态文件。本文将详细介绍如何使用Nginx搭建一个静态文件服务器,使您能够轻松地浏览目录、导航子目录和文件,并通过浏览器下载文件。 以下是使用Nginx搭建静态文件服务器的详细步骤: 步骤1:安装Nginx 首先,确保您已经安装了

    2024年02月08日
    浏览(33)
  • 使用CentOS搭建高性能静态HTTP服务器

    在互联网应用中,静态内容是广泛存在的,例如HTML页面、图片、视频等。为了提供高效、稳定和安全的静态内容服务,我们可以使用CentOS来搭建高性能的静态HTTP服务器。 1. 选择合适的软件 Nginx和Apache是两个流行的HTTP服务器软件。Nginx以其高效、轻量级和快速的性能而著称,

    2024年01月23日
    浏览(48)
  • 使用Node.js手撸一个建静态Web服务器,内部CV指南

    文章里有全部代码,也可以积分下载 操作步骤如上图 文章结束 话说这个键盘真漂亮~~ 1.1 静态Web服务器概念 我们通常称 静态Web服务器 为 静态网站 ,其主要特征就是服务器上的所有内容都是现成的,不需要后端做额外的处理。当我们向静态服务器发送网页请求时,服务器只

    2023年04月08日
    浏览(36)
  • 搭建web服务器和NFS服务器

    网站需求: 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于www.openlab.com/student/ 网站访问学生信息,www.openlab.com/data/网站访问教学资料www.openlab.com/money/网站访问缴费网站。 3.要求 (1)学生

    2024年01月23日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包