📜  网络编程Python – HTTP 服务器(1)

📅  最后修改于: 2023-12-03 15:27:40.879000             🧑  作者: Mango

网络编程Python – HTTP 服务器

简介

在网络编程中,HTTP服务器是最常见的服务器之一。HTTP(超文本传输协议)是一种用于传输超媒体文档的应用层协议。它是为Web浏览器与Web服务器之间的通信而设计的。在本文中,我们将介绍如何使用Python创建一个HTTP服务器,并向您展示如何实现各种功能。

Python HTTP服务器
建立HTTP服务器

Python的http.server模块提供了实现HTTP服务器所需的类。要创建HTTP服务器,只需导入http.server,并使用HTTPServerBaseHTTPRequestHandler类即可。

# 导入必要的库
import http.server
import socketserver

PORT = 8080 # 端口号

# 设置并启动HTTP服务器
Handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", PORT), Handler)
print("正在监听端口", PORT)
httpd.serve_forever()
响应HTTP请求

创建的HTTP服务器可以处理HTTP请求,并通过HTTP响应回复客户端。要实现自定义的HTTP响应,可以继承BaseHTTPRequestHandler类并实现do_GET()do_POST()方法。以下是一个简单的示例,它在HTTP请求中查询当前时间并将其作为响应返回给客户端。

import http.server
import socketserver
import time

PORT = 8080 # 端口号

# 定义自定义请求处理程序
class MyHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/time':
            # 获取当前时间并编码响应
            current_time = time.ctime(time.time())
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(bytes(current_time, "utf8"))
        else:
            # 原始的请求处理
            return http.server.SimpleHTTPRequestHandler.do_GET(self)

# 设置并启动HTTP服务器
Handler = MyHandler
httpd = socketserver.TCPServer(("", PORT), Handler)
print("正在监听端口", PORT)
httpd.serve_forever()
静态文件服务器

可以将Python HTTP服务器用作静态文件服务器。静态文件服务器可以处理来自客户端的GET请求,并将请求的文件发送回客户端。这对于在Web上发布静态文件(如HTML、CSS、JavaScript、图像等)非常有用。

import http.server
import socketserver

PORT = 8080  # 端口号

# 定义请求处理程序
Handler = http.server.SimpleHTTPRequestHandler

# 设置并启动HTTP服务器
with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("正在监听端口", PORT)
    httpd.serve_forever()

现在,打开Web浏览器并以"http://localhost:8080"为地址访问,将会看到Python HTTP服务器显示的目录中的文件列表。

Web应用程序

使用Python HTTP服务器,可以创建Web服务器并在客户端中运行Web应用程序。Python Web框架通常使用HTTP服务器来启动Web应用程序。

例如,可以使用Flask框架创建Python Web应用程序,并使用HTTP服务器在客户端运行。以下是一个简单的示例,使用Python Flask框架创建Web应用程序:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

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

使用以下命令运行该脚本:

python myapp.py

此脚本使用Flask创建了一个名为"myapp"的Web应用程序,并且在根URL上定义了一个简单的路由。在运行脚本后,Web应用程序将在"http://localhost:5000"上运行。

安全性

Python HTTP服务器可以被用作简单的防火墙。通过拦截请求并禁止不安全的请求,可以增强服务器的安全性。以下代码展示了如何扩展BaseHTTPRequestHandler类,仅允许来自允许地址的客户端请求:

from http.server import BaseHTTPRequestHandle, HTTPServer
import socketserver

ALLOWED_IPS = ['127.0.0.1', 'localhost']

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        if self.client_address[0] not in ALLOWED_IPS:
            self.send_error(403, "该地址不在被允许的IP范围内")
            return
        else:
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(bytes("This is a secure response", "utf8"))

if __name__ == "__main__":
    HOST, PORT = "", 8080

    with HTTPServer((HOST, PORT), MyHandler) as httpd:
        print("正在监听端口", PORT)
        httpd.serve_forever()

这个例子中,HTTP服务器只允许IP地址为"127.0.0.1"和"localhost"的客户端发出请求。如果客户端的地址不在允许的IP列表中,服务器将向客户端发送HTTP错误代码403。

结论

Python HTTP服务器是非常有用的网络编程工具。使用Python实现HTTP服务器可以使程序员方便地创建Web服务器、文件服务器和安全服务器。无论是您需要在自己的计算机上搭建简单的HTTP服务器还是需要编写一个大型、复杂的Web应用程序,Python HTTP服务器都是一个强大的选择。