我在python3中編寫了一個相當簡單的http web服務器。 Web服務器需要很簡單 - 只能從配置文件中進行基本讀取等。我只使用標準庫,現在它工作得相當好。Python3 Http Web服務器:虛擬主機
這個項目只有一個要求,我不能在自己的虛擬主機上實現。我需要至少有兩個虛擬主機,在配置文件中定義。問題是,我無法找到一種方式,我怎麼才能在Python中實現它們。有沒有人有任何指南,文章,也許一些簡單的實施如何做到這一點?
我將不勝感激任何幫助。
我在python3中編寫了一個相當簡單的http web服務器。 Web服務器需要很簡單 - 只能從配置文件中進行基本讀取等。我只使用標準庫,現在它工作得相當好。Python3 Http Web服務器:虛擬主機
這個項目只有一個要求,我不能在自己的虛擬主機上實現。我需要至少有兩個虛擬主機,在配置文件中定義。問題是,我無法找到一種方式,我怎麼才能在Python中實現它們。有沒有人有任何指南,文章,也許一些簡單的實施如何做到這一點?
我將不勝感激任何幫助。
對於一個簡單的HTTP Web服務器,您可以用WSGI reference implementation開始:
的wsgiref是WSGI規範的參考實現,可用於將WSGI支持添加到Web服務器或框架。它提供了工具,用於操縱WSGI環境變量和響應頭,基類實現WSGI服務器,演示HTTP服務器,供應WSGI應用,...
修改例如服務器檢查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()
你不能在Python 3.0中使用所謂的WSGI參考實現,因爲沒有像Python 3.0的WSGI那樣的東西。 WSGI 1.0規範僅支持Python 2.X.因此,使用任何聲稱滿足WSGI規範的東西,並且與Python 3.0一起工作的人極其懷疑並理解,如果WSGI規範是針對Python 3.0發佈的,那麼您擁有的任何代碼都可以與之前的任何代碼一起使用工作。 – 2009-08-02 11:49:26
虛擬主機通過服從HTTP請求中的Host:頭來工作。
只需讀取請求的報頭,並採取基於主機的價值作用:頭
問題已回答,爲什麼不把它標記爲這樣? – 2009-06-08 15:39:16