使用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_GET和do_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错误。
