[英]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.