Die benutzerdefinierte Implementierung von Python http.server funktioniert nicht ordnungsgemäß, wenn HTTPS aktiviert istPython

Python-Programme
Guest
 Die benutzerdefinierte Implementierung von Python http.server funktioniert nicht ordnungsgemäß, wenn HTTPS aktiviert ist

Post by Guest »

Mir ist bekannt, dass das Python-http.server-Modul hauptsächlich zu Testzwecken konzipiert wurde, da es bei seiner Implementierung einige bekannte Sicherheitsprobleme gibt.
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()
Wenn das Debug aktiviert ist und daher der Codeteil im Zusammenhang mit HTTPS übersprungen wird, funktioniert der Server ordnungsgemäß. Wenn stattdessen das Debug deaktiviert ist, scheint der Server auch gut zu funktionieren, aber nach einigen Stunden reagiert er nicht mehr: Alle Verbindungsanfragen laufen ab.
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:
  • Code: Select all

    _manage_get_request
    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

    _send_headers
    ist im Grunde ein Wrapper der Methode send_header der übergeordneten Klasse
  • Code: Select all

    _send_body
    schreibt einfach den Antworttext in den Socket-Puffer

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post