欢迎访问宙启技术站
智能推送

使用BaseHTTPRequestHandler处理HTTP错误的示例代码

发布时间:2023-12-24 07:24:24

BaseHTTPRequestHandler是Python内置的HTTP请求处理类,可以用于处理HTTP请求和响应。我们可以通过继承BaseHTTPRequestHandler类自定义处理HTTP请求的逻辑,包括处理错误请求。下面是一个使用BaseHTTPRequestHandler处理HTTP错误的示例代码:

from http.server import BaseHTTPRequestHandler
import json

class MyHandler(BaseHTTPRequestHandler):
    
    def do_GET(self):
        try:
            # 处理GET请求的逻辑
            if self.path == '/':
                self.send_response(200)
                self.send_header('Content-type', 'text/html')
                self.end_headers()
                self.wfile.write(b'Hello, World!')
            else:
                self.send_error(404, 'File Not Found: %s' % self.path)
        except Exception as e:
            self.send_error(500, 'Internal Server Error: %s' % str(e))
        
    def do_POST(self):
        try:
            # 处理POST请求的逻辑
            if self.path == '/':
                content_length = int(self.headers['Content-Length'])
                post_data = self.rfile.read(content_length)
                # 处理post_data的逻辑
                self.send_response(200)
                self.send_header('Content-type', 'application/json')
                self.end_headers()
                self.wfile.write(json.dumps({'message':'success'}).encode('utf-8'))
            else:
                self.send_error(404, 'File Not Found: %s' % self.path)
        except Exception as e:
            self.send_error(500, 'Internal Server Error: %s' % str(e))

上述代码定义了一个自定义的处理器类MyHandler,继承自BaseHTTPRequestHandler。其中,do_GETdo_POST方法分别处理GET和POST请求。在处理请求的过程中,如果出现错误,可以使用self.send_error方法返回相应的错误代码和错误信息。

下面是一个使用该自定义处理器类的简单例子:

from http.server import HTTPServer
import socket

# 设置主机和端口号
host = '127.0.0.1'
port = 8000

# 创建HTTP服务器并绑定自定义处理器类
server = HTTPServer((host, port), MyHandler)
print('Starting server on http://%s:%s' % (host, port))

try:
    # 启动服务器并等待请求
    server.serve_forever()
except KeyboardInterrupt:
    server.shutdown()

运行上述代码后,可以通过浏览器或其他HTTP客户端向http://127.0.0.1:8000/发送GET和POST请求。如果请求的路径不是根路径,则会返回404错误,如果出现其他错误则会返回500错误。