基于 Python 实现一个简单的 HTTP 服务器

这篇具有很好参考价值的文章主要介绍了基于 Python 实现一个简单的 HTTP 服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章这个题目,让我想起了大学时上《Unix 网络编程》这门专业课的家庭作业,题目几乎一模一样。

什么是 HTTP 服务器

HTTP 服务器工作在服务端,主要功能包括处理来自客户端的请求,管理网络资源,以及生成和发送响应给客户端。在实际应用中,HTTP 服务器不仅限于传输 HTML 文档;它还可以传送图片、视频、应用程序数据及更多类型的数据。这种服务器通常用于网站托管、API 提供以及数据传输等多种场景。

举例说明,Apache HTTP Server 和 Nginx 是两个广泛使用的 HTTP 服务器软件。Apache 由 Apache 软件基金会开发,是一个模块化的服务器,支持广泛的功能,包括可加载的模块、认证机制、SSL/TLS 加密等。Nginx 以其高性能、稳定性、低资源消耗以及简单配置而著称,经常被用作负载均衡器和反向代理服务器。

python 在服务器上有哪些功能,Python,python,http,服务器

作为实现 HTTP 服务器的入门练习,我们先实现一个能够打印 Hello World 请求的最简单的HTTP服务器。服务器监听传入的连接,处理HTTP请求,并为任何请求返回一个基本的HTML响应“Hello, World!”。

它绑定到本地主机(127.0.0.1)的8080端口。当客户端连接并发送HTTP请求时,服务器会以最小的HTTP/1.1 200 OK响应回复,其中包含一个HTML正文。

我们不重复造轮子,使用 Python 里提供的 socket library.

源代码实现,包括一个SimpleHTTPServer类,其中包含启动服务器和处理传入请求的方法。start方法设置了一个TCP套接字,将其绑定到指定的主机和端口,并监听传入的连接。接收到连接后,它调用handle_request方法来处理HTTP请求。

handle_request方法解析HTTP请求,提取请求方法、路径和HTTP版本,然后构造一个带有基本HTML正文的HTTP响应。最后,它将响应发送回客户端并关闭连接。

服务器在一个无限循环中运行,持续接受连接并处理请求,直到手动终止或出现错误。

详细的源代码如下:

# 导入必要的模块
import socket

# 定义一个简单的HTTP服务器类
class SimpleHTTPServer:
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.server_socket = None

    def start(self):
        try:
            # 创建一个TCP套接字
            self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            # 设置套接字选项,允许地址重用
            self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            # 绑定主机和端口
            self.server_socket.bind((self.host, self.port))
            # 监听连接
            self.server_socket.listen(5)
            print("`HTTP 服务器已启动,监听地址:%s,端口:%d" % (self.host, self.port))

            while True:
                # 接受连接
                client_socket, client_address = self.server_socket.accept()
                print("`接收到来自 %s 的连接" % str(client_address))
                # 处理HTTP请求
                self.handle_request(client_socket)

        except Exception as e:
            print("`发生异常:%s" % str(e))

        finally:
            if self.server_socket:
                self.server_socket.close()
                print("`HTTP 服务器已关闭")

    def handle_request(self, client_socket):
        # 接收客户端请求数据
        request_data = client_socket.recv(1024).decode('utf-8')
        # 解析请求
        request_lines = request_data.split('\n')
        if request_lines:
            # 获取请求方法、路径和HTTP版本
            method, path, http_version = request_lines[0].strip().split()
            print("`请求方法:%s,路径:%s,HTTP版本:%s" % (method, path, http_version))
            
            # 构造HTTP响应
            response_body = "<html><body><h1>Hello, World!</h1></body></html>"
            response_headers = [
                "HTTP/1.1 200 OK",
                "Content-Type: text/html",
                "Content-Length: %d" % len(response_body),
                "\n"
            ]
            response = '\n'.join(response_headers) + response_body
            
            # 发送响应数据到客户端
            client_socket.sendall(response.encode('utf-8'))
            # 关闭客户端连接
            client_socket.close()
            print("`响应已发送")

# 主函数
if __name__ == "__main__":
    # 服务器主机和端口
    HOST = '127.0.0.1'
    PORT = 8080
    # 创建HTTP服务器实例并启动
    http_server = SimpleHTTPServer(HOST, PORT)
    http_server.start()

这个实现演示了使用Python构建HTTP服务器的基本原理,包括套接字编程、解析HTTP请求和生成HTTP响应。它可以作为构建更复杂的Web应用程序或探索Python中HTTP服务器的高级特性的起点。

使用方法

在命令行下运行服务器:

python httpServer.py

看到如下输出:

`HTTP 服务器已启动,监听地址:127.0.0.1,端口:8080
python 在服务器上有哪些功能,Python,python,http,服务器

然后我们在浏览器地址栏里输入 localhost:8080, 马上能收到 python 实现的 HTTP 服务器发送回客户端的 Hello World 响应。

python 在服务器上有哪些功能,Python,python,http,服务器

同时从控制台上看到 Python HTTP 服务器的打印输出,里面包含了来自客户端的信息:
python 在服务器上有哪些功能,Python,python,http,服务器

python 在服务器上有哪些功能,Python,python,http,服务器文章来源地址https://www.toymoban.com/news/detail-842334.html

到了这里,关于基于 Python 实现一个简单的 HTTP 服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 用Rust设计一个并发的Web服务:常用Rust库如Tokio、Hyper等,基于TCP/IP协议栈,实现了一个简单的并发Web服务器,并结合具体的代码讲解如何编写并发Web服务器的程序

    作者:禅与计算机程序设计艺术 1994年,互联网泡沫破裂,一批优秀的程序员、工程师纷纷加入到web开发领域。而其中的Rust语言却备受瞩目,它是一种现代系统编程语言,专注于安全和并发。因此,Rust在当下成为最流行的编程语言之一,很多框架也开始使用Rust重构,这使得

    2024年02月06日
    浏览(43)
  • 【计算机网络】HTTP协议以及简单的HTTP服务器实现

    虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输议)就是其中之一。 平时我们俗称的 “网址” 其实就是说的 URL 像 / ? : 等这样的字符, 已经被url当做特殊意义理解了.

    2024年01月20日
    浏览(41)
  • 初识http协议,简单实现浏览器和服务器通信

    平时俗称的 “网址” 其实就是说的 URL,例如在百度上搜索一个C++ 可以看到这段网址前面有个 https 那么这个就代表着使用的是https协议,现在都是使用https协议,不过还是需要认识以下http协议 像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现。

    2024年02月14日
    浏览(30)
  • 在Linux服务器上简单部署一个Python项目

    一、在对应的服务器上检查有无Python环境 二、在服务器上创建对应项目的文件 三、收集项目的依赖包 四、将项目拷贝到服务器 五、创建Python运行的虚拟环境,并启动 六、安装对应项目的依赖包 七、运行主程序文件 以上就是在Linux上简单部署一个python项目的方法。

    2024年02月12日
    浏览(33)
  • Java 简单实现一个 UDP 回显服务器

    只需要继承自之前写的服务端, 然后重写父类 process 方法即可. 添加一些查询字典的逻辑. 效果 ✨ 本文记录了一个简单的 UDP 回显服务器代码. ✨ 想了解更多计算机网络的知识, 可以收藏一下本人的计算机网络学习专栏, 里面会持续更新本人的学习记录, 跟随我一起不断学习. ✨

    2024年02月21日
    浏览(34)
  • HTTP 服务器(基于go实现)

    编写一个 HTTP 服务器,接收客户端 request,并将 request 中带的 header 写入 response header 编写一个 HTTP 服务器, 接收客户端 request,并将 request 中带的 header 写入 response header ,读取当前系统的环境变量中的 VERSION 配置,并写入 response header Server 端记录访问日志包括客户端 IP,HT

    2024年02月11日
    浏览(41)
  • Web服务器实现|基于阻塞队列线程池的Http服务器|线程控制|Http协议

    代码地址:WebServer_GitHub_Addr 摘要 本实验通过C++语言,实现了一个基于阻塞队列线程池的多线程Web服务器。该服务器支持通过http协议发送报文,跨主机抓取服务器上特定资源。与此同时,该Web服务器后台通过C++语言,通过原生系统线程调用 pthread.h ,实现了一个 基于阻塞队列

    2024年02月07日
    浏览(52)
  • 基于BaseHTTPRequestHandler的HTTP服务器基础实现

    BaseHTTPRequestHandler 是Python中的一个基类,属于 http.server 模块,用于处理HTTP请求的基本功能。它提供了处理常见HTTP请求方法(如GET、POST等)的默认实现,并允许你在子类中进行定制化扩展。下面详细介绍 BaseHTTPRequestHandler 的主要特点和使用方法: 主要特点: 处理HTTP请求:

    2024年02月08日
    浏览(34)
  • 【内网穿透】使用Nodejs搭建简单的HTTP服务器 ,并实现公网远程访问

    目录 前言 1.安装Node.js环境 2.创建node.js服务 3. 访问node.js 服务 4.内网穿透 4.1 安装配置cpolar内网穿透 4.2 创建隧道映射本地端口 5.固定公网地址 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation(原为 Node.js Foundation,已与 JS Foundat

    2024年02月10日
    浏览(34)
  • 【网络编程】实现一个简单多线程版本TCP服务器(附源码)

    accept 函数是在服务器端用于接受客户端连接请求的函数,它在监听套接字上等待客户端的连接,并在有新的连接请求到来时创建一个新的套接字用于与该客户端通信。 下面是 accept 函数的详细介绍以及各个参数的意义: sockfd: 是服务器监听套接字的文件描述符,通常是使用

    2024年02月13日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包