Pregunta

Estoy escribiendo un servidor web http bastante simple en python3. El servidor web debe ser simple - lectura solamente básica a partir de los archivos de configuración, etc. Estoy usando bibliotecas único estándar y por ahora funciona bastante bien.

Sólo hay un requisito para este proyecto, que no puedo poner en práctica en mis propias - hosts virtuales. Es necesario disponer de al menos dos hosts virtuales, definidos en los archivos de configuración. El problema es que no puedo encontrar la manera de cómo puedo aplicar en Python. ¿Alguien tiene alguna guías, artículos, tal vez algo de implementación simple de cómo se puede hacer esto?

Le agradecería cualquier ayuda.

¿Fue útil?

Solución

Para un simple servidor web HTTP, puede comenzar con el href="http://docs.python.org/3.0/library/wsgiref.html#module-wsgiref" referencia WSGI aplicación:

  

wsgiref es una implementación de referencia de la especificación WSGI que se puede utilizar para añadir soporte WSGI a un servidor web o un marco. Se proporciona utilidades para la manipulación de las variables de entorno WSGI y cabeceras de respuesta, clases base para la implementación de servidores WSGI, un servidor HTTP que sirve de demostración aplicaciones WSGI ...

Modificar el servidor de ejemplo para comprobar el encabezado HTTP_HOST, aquí es una aplicación sencilla que responde, en función de la máquina virtual, con un texto diferente. (Que se extiende el ejemplo de usar un archivo de configuración se deja como un ejercicio).

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()

Otros consejos

Las máquinas virtuales funcionan obedeciendo al anfitrión:. Cabecera en la petición HTTP

Basta con leer los encabezados de la solicitud, y tomar medidas basadas en el valor de la cabecera Host:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top