Ich versuche, einen Python-Server zu implementieren, der sowohl HTTP als auch HTTPS in BaseHTTPServer unterstützt. Dies ist mein Code:Dual HTTP und HTTPS Python-Server basierend auf BaseHTTPServer funktioniert nicht wie erwartet
server_class = BaseHTTPServer.HTTPServer
# Configure servers
httpd = server_class(("0.0.0.0", 1044), MyHandler)
httpsd = server_class(("0.0.0.0", 11044), MyHandler)
httpsd.socket = ssl.wrap_socket(httpsd.socket, keyfile="/tmp/localhost.key", certfile="/tmp/localhost.crt", server_side=True)
# Run the servers
try:
httpd.serve_forever()
httpsd.serve_forever()
except KeyboardInterrupt:
print("Closing the server...")
httpd.server_close()
httpsd.server_close()
So, HTTP läuft in Port 1044 und HTTPS läuft in 11044. Die MyHandler Klasse wird aus Gründen der Kürze weggelassen.
Mit diesem Code, wenn ich Anfragen an HTTP-Port (z. B. curl http://localhost:1044/path
) senden, funktioniert es. Wenn ich jedoch Anforderungen an den HTTPS-Port (z. B. curl -k https://localhost:11104/path
) sende, antwortet der Server niemals, d. H. Das Rollo-Terminal wird gehängt.
Ich habe beobachtet, dass, wenn ich die Zeile den HTTP-Server (d. H. httpd.server_forever()
) beginnend kommentieren, dann funktioniert der HTTPS-Server, .i.e. curl -k https://localhost:11104/path
funktioniert. Ich schätze also, dass ich etwas falsch mache, was verhindert, dass ich beide Server gleichzeitig einstellen kann.
Jede Hilfe wird geschätzt!
vielleicht wegen eines Tippfehlers für https? localhsot – micebrain
Es gab einen Tippfehler in meiner Frage Post (jetzt behoben), aber im eigentlichen Test habe ich richtig "localhost". Danke für die Rückmeldung! – fgalan
Um ... Serve_forever behandelt jeweils eine Anforderung bis zum Herunterfahren, also wenn Sie http und https einmal zu einem Zeitpunkt bereitstellen möchten. Versuche sie in einem anderen Thread zu tun. –