Pergunta

Eu estou escrevendo, ao invés de um simples servidor http da web em python3.O servidor web precisa ser simples - apenas o básico de leitura a partir de arquivos de configuração, etc.Eu estou usando apenas bibliotecas padrão e agora ele funciona sim ok.

Existe apenas um requisito para esse projeto, que eu não posso implementar no meu próprio - virtual hosts.Eu preciso ter, pelo menos, dois hosts virtuais, definido no arquivos de configuração.O problema é que eu não consigo encontrar uma maneira de como posso implementá-las em python.Alguém tem algum guias, artigos, talvez alguns implementação simples como isso pode ser feito?

Eu ficaria muito grato por qualquer ajuda.

Foi útil?

Solução

Para um simples servidor HTTP da web, você pode iniciar com o WSGI implementação de referência:

wsgiref é uma implementação de referência do WSGI especificação que pode ser usada para adicionar WSGI suporte para um servidor web ou um quadro.Ele fornece utilitários para manipulação de WSGI variáveis de ambiente e cabeçalhos de resposta, classes base para a implementação de WSGI servidores, uma demonstração do servidor HTTP que serve WSGI applications,...

Modificar o servidor de exemplo para verificar o HTTP_HOST cabeçalho, aqui é um aplicativo simples que responde, dependendo do host virtual, com um texto diferente.(Estendendo o exemplo para usar um arquivo de configuração é deixado como um exercício).

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

Outras dicas

Os hosts virtuais trabalham obedecendo ao host: cabeçalho na solicitação HTTP.

Basta ler os cabeçalhos da solicitação e tomar medidas com base no valor do host: cabeçalho

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top