Das heißt, Für ein sehr bescheidenes persönliches Projekt habe ich meine eigene Klasse implementiert, abgeleitet von http.server.BaseHTTPRequestHandler, wobei ich die Methode do_GET überschreibe. Alles funktionierte ordnungsgemäß, bis ich die Python-Version auf 3.12 aktualisiert habe: Es scheint, dass diese Version auch einige Änderungen am SSL-Modul mit sich brachte und ich daher den Code ein wenig umgestalten musste.
Diesbezüglich ist dies der komprimierte Inhalt der Datei main.py:
Code: Select all
# ...here are import statements and other functions...
class RequestHandler(BaseHTTPRequestHandler):
# ...here the other methods are defined...
def do_GET(self):
resobj = self._manage_get_request()
self.send_response(resobj.status_code)
self._send_headers(resobj.headers)
self._send_body(resobj.body)
def main():
print('Running http server...')
address = (_HTTP_SERV_ADDR, _HTTP_SERV_PORT)
httpd = HTTPServer(address, RequestHandler)
if not _DEBUG_ENABLED:
print('Enabling TLS protocol...')
context = _ssl.SSLContext(_ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain(certfile=_CERTIFICATE_FILE_PATH,
keyfile=_KEY_FILE_PATH)
httpd.socket = context.wrap_socket(httpd.socket, server_side=True)
print(f'Server is listening ({httpd.server_address[0]}:{httpd.server_port})...')
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
print('Shutting down http server...')
httpd.server_close()
Könnte mir jemand von euch welche zur Verfügung stellen? Hinweise, was überprüft werden muss, um besser zu verstehen, was vor sich geht und warum?
Weitere Informationen zur Implementierung
Während send_response bereits in definiert ist BaseHTTPRequestHandler, die anderen in do_GET aufgerufenen Methoden sind in meiner Implementierung definiert. Insbesondere:
- ist eine Art if-Anweisung zur ordnungsgemäßen Verwaltung der Anfrage unter Berücksichtigung der über die Abfrage bereitgestellten Parameter; Es gibt ein benutzerdefiniertes Antwortobjekt mit Code, Headern und Text zurück
Code: Select all
_manage_get_request
- ist im Grunde ein Wrapper der Methode send_header der übergeordneten Klasse
Code: Select all
_send_headers
- schreibt einfach den Antworttext in den Socket-Puffer
Code: Select all
_send_body