簡體   English   中英

Python3 Http Web服務器:虛擬主機

[英]Python3 Http Web Server: virtual hosts

我在python3中編寫了一個相當簡單的http Web服務器。 Web服務器需要很簡單 - 只能從配置文件等基本讀取。我只使用標准庫,現在它工作得相當好。

這個項目只有一個要求,我無法自己實現 - 虛擬主機。 我需要至少有兩個虛擬主機,在配置文件中定義。 問題是,我找不到如何在python中實現它們的方法。 有沒有人有任何指南,文章,也許一些簡單的實現如何做到這一點?

我將不勝感激任何幫助。

虛擬主機通過遵守HTTP請求中的Host:頭來工作。

只需讀取請求的標頭,然后根據Host:標頭的值執行操作

對於簡單的HTTP Web服務器,您可以從WSGI參考實現開始

wsgiref是WSGI規范的參考實現,可用於向Web服務器或框架添加WSGI支持。 它提供了用於操作WSGI環境變量和響應頭的實用程序,用於實現WSGI服務器的基類,為WSGI應用程序提供服務的演示HTTP服務器 ,...

修改示例服務器以檢查HTTP_HOST標頭,這是一個簡單的應用程序,它根據虛擬主機使用不同的文本進行響應。 (擴展示例以使用配置文件留作練習)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM