Frage

Ich schreibe einen ziemlich einfachen HTTP -Webserver in Python3. Der Webserver muss einfach sein - nur grundlegendes Lesen aus Konfigurationsdateien usw. Ich verwende nur Standardbibliotheken und jetzt funktioniert es eher in Ordnung.

Es gibt nur eine Anforderung für dieses Projekt, das ich nicht alleine implementieren kann - virtuelle Hosts. Ich muss mindestens zwei virtuelle Hosts haben, die in Konfigurationsdateien definiert sind. Das Problem ist, dass ich keinen Weg finden kann, wie ich sie in Python implementieren kann. Hat jemand irgendwelche Leitfäden, Artikel, vielleicht eine einfache Implementierung, wie kann dies getan werden?

Ich wäre dankbar für jede Hilfe.

War es hilfreich?

Lösung

Für einen einfachen HTTP -Webserver können Sie mit dem beginnen WSGI -Referenzimplementierung:

WSGIREF ist eine Referenzimplementierung der WSGI -Spezifikation, mit der ein Webserver oder ein Framework WSGI -Unterstützung hinzufügt. Es bietet Dienstprogramme für die Manipulation von WSGI -Umgebungsvariablen und Reaktionsüberschriften, Basisklassen für die Implementierung von WSGI -Servern, Ein Demo HTTP -Server, der WSGI -Anwendungen bedient,...

Ändern des Beispielservers, um die zu überprüfen HTTP_HOST Header, hier ist eine einfache App, die je nach virtuellem Host mit einem anderen Text antwortet. (Erweiterung des Beispiels zur Verwendung einer Konfigurationsdatei bleibt als Übung.)

import wsgiref
from wsgiref.simple_server import make_server

def my_app(environ,start_response):
    from io import StringIO
    stdout = StringIO()
    host = environ["HTTP_HOST"].split(":")[0]
    if host == "127.0.0.1":
        print("This is virtual host 1", file=stdout)
    elif host == "localhost":
        print("This is virtual host 2", file=stdout)
    else:
        print("Unknown virtual host", file=stdout)

    print("Hello world!", file=stdout)
    print(file=stdout)
    start_response(b"200 OK", [(b'Content-Type',b'text/plain; charset=utf-8')])
    return [stdout.getvalue().encode("utf-8")]

def test1():
    httpd = make_server('', 8000, my_app)
    print("Serving HTTP on port 8000...")

    # Respond to requests until process is killed
    httpd.serve_forever()

Andere Tipps

Virtuelle Hosts arbeiten, indem sie dem Host befolgt: Header in der HTTP -Anfrage.

Lesen Sie einfach die Header der Anfrage und ergreifen Sie Maßnahmen basierend auf dem Wert des Hosts: Header

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top