我在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