文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python 构建 HTTP 服务器的8个步骤

2024-11-28 15:57

关注

步骤1:安装Python环境

前提条件:

验证安装:

python --version

输出应类似于 Python 3.10.6。

步骤2:创建项目目录

为了更好地组织代码,建议为项目创建一个新的目录:

mkdir my_http_server
cd my_http_server

步骤3:编写基本HTTP服务器

我们将从一个非常简单的 HTTP 服务器开始,它能接收请求并返回固定的响应。

创建文件 server.py:

from http.server import BaseHTTPRequestHandler, HTTPServer

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        message = "Hello, World!"
        self.wfile.write(message.encode())

def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    print(f"Starting httpd server on {server_address[0]}:{server_address[1]}")
    httpd.serve_forever()

if __name__ == "__main__":
    run()

解释:

步骤4:启动服务器

在命令行中运行以下命令:

python server.py

你会看到类似下面的输出:

Starting httpd server on 0.0.0.0:8000

现在,打开浏览器并访问 http://localhost:8000,你应该能看到 “Hello, World!” 这个消息。

步骤5:处理静态文件

目前我们的服务器只能返回固定的字符串。接下来,让我们修改服务器,使其能够处理静态文件,例如 HTML、CSS 和 JavaScript 文件。

修改 server.py 文件:

import os
from http.server import BaseHTTPRequestHandler, HTTPServer

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/':
            filename = 'index.html'
        else:
            filename = self.path[1:]

        try:
            with open(filename, 'rb') as file:
                content = file.read()
                self.send_response(200)
                self.end_headers()
                self.wfile.write(content)
        except FileNotFoundError:
            self.send_error(404, "File Not Found")

def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    print(f"Starting httpd server on {server_address[0]}:{server_address[1]}")
    httpd.serve_forever()

if __name__ == "__main__":
    run()

解释:

创建静态文件:

在项目目录中创建以下文件:

index.html 示例:




    My Simple HTTP Server
    


    
    

Welcome to my simple HTTP server.

style.css 示例:

body {
    font-family: Arial, sans-serif;
    background-color: #f0f0f0;
}

h1 {
    color: blue;
}

script.js 示例:

console.log("This is a simple script.");

启动服务器:

在命令行中运行以下命令:

python server.py

打开浏览器并访问 http://localhost:8000,你应该能看到页面显示 “Hello, World!” 并且样式和脚本也正常加载。

步骤6:处理 POST 请求

接下来,我们将让服务器支持处理 POST 请求。这通常用于接收表单数据或其他用户输入。

修改 server.py 文件:

import os
from http.server import BaseHTTPRequestHandler, HTTPServer

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/':
            filename = 'index.html'
        else:
            filename = self.path[1:]

        try:
            with open(filename, 'rb') as file:
                content = file.read()
                self.send_response(200)
                self.end_headers()
                self.wfile.write(content)
        except FileNotFoundError:
            self.send_error(404, "File Not Found")

    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)
        self.send_response(200)
        self.end_headers()
        response = f"Received: {post_data.decode('utf-8')}"
        self.wfile.write(response.encode())

def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    print(f"Starting httpd server on {server_address[0]}:{server_address[1]}")
    httpd.serve_forever()

if __name__ == "__main__":
    run()

解释:

创建表单页面:

修改 index.html 文件,添加一个简单的表单:




    My Simple HTTP Server
    


    
    

Welcome to my simple HTTP server.

启动服务器:

在命令行中运行以下命令:

python server.py

打开浏览器并访问 http://localhost:8000,填写表单并提交,你会看到服务器返回的内容。

步骤7:处理路由

在实际应用中,我们需要根据不同的 URL 路径来处理不同的请求。我们可以使用简单的条件语句来实现这一点。

修改 server.py 文件:

import os
from http.server import BaseHTTPRequestHandler, HTTPServer

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/':
            filename = 'index.html'
        elif self.path == '/about':
            filename = 'about.html'
        else:
            filename = self.path[1:]

        try:
            with open(filename, 'rb') as file:
                content = file.read()
                self.send_response(200)
                self.end_headers()
                self.wfile.write(content)
        except FileNotFoundError:
            self.send_error(404, "File Not Found")

    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)
        self.send_response(200)
        self.end_headers()
        response = f"Received: {post_data.decode('utf-8')}"
        self.wfile.write(response.encode())

def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    print(f"Starting httpd server on {server_address[0]}:{server_address[1]}")
    httpd.serve_forever()

if __name__ == "__main__":
    run()

解释:

创建 about.html 文件:




    About Us
    


    
    

This is the about page of our simple HTTP server.

启动服务器:

在命令行中运行以下命令:

python server.py

打开浏览器并访问 http://localhost:8000/about,你会看到关于页面的内容。

步骤8:使用框架简化开发

虽然手动编写 HTTP 服务器可以学习很多底层知识,但在实际开发中,我们通常会使用现成的框架来简化开发过程。Flask 是一个非常流行的轻量级 Web 框架,非常适合快速开发。

安装 Flask:

pip install flaskpip install flask

创建 Flask 应用:

创建一个名为 app.py 的新文件:

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/about')
def about():
    return render_template('about.html')

@app.route('/submit', methods=['POST'])
def submit():
    message = request.form.get('message')
    return f"Received: {message}"

if __name__ == '__main__':
    app.run(port=8000)

解释:

启动 Flask 服务器:

在命令行中运行以下命令:

python app.py

打开浏览器并访问 http://localhost:8000,你会看到页面内容。填写表单并提交,你会看到服务器返回的内容。

总结

本文详细介绍了如何使用 Python 构建一个基本的 HTTP 服务器,并逐步介绍了更高级的功能,包括处理静态文件、POST 请求以及路由。最后,还展示了如何使用 Flask 框架简化开发过程。通过这些步骤,读者可以掌握构建 HTTP 服务器的基本方法,并了解如何进一步扩展其功能。

来源:手把手PythonAI编程内容投诉

免责声明:

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

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯