Python3 HTTP 웹 서버 : 가상 호스트
-
13-09-2019 - |
문제
Python3에서 다소 간단한 HTTP 웹 서버를 작성하고 있습니다. 웹 서버는 간단해야합니다. 구성 파일 등의 기본 판독 만 읽습니다. 표준 라이브러리 만 사용하고 있으며 현재는 잘 작동합니다.
이 프로젝트에 대한 요구 사항은 단 하나 뿐이며, 내 자신의 가상 호스트에서는 구현할 수 없습니다. 구성 파일에 정의 된 두 개의 가상 호스트가 있어야합니다. 문제는 파이썬에서 어떻게 구현할 수있는 방법을 찾을 수 없다는 것입니다. 누구든지 가이드, 기사, 아마도 간단한 구현 방법이 있습니까?
도움을 주셔서 감사합니다.
해결책
간단한 HTTP 웹 서버의 경우 WSGI 참조 구현:
WSGIREF는 웹 서버 또는 프레임 워크에 WSGI 지원을 추가하는 데 사용할 수있는 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()
다른 팁
가상 호스트는 HTTP 요청에서 호스트 : 헤더를 순종하여 작동합니다.
요청의 헤더를 읽고 호스트의 값을 기준으로 조치를 취하십시오 : 헤더
제휴하지 않습니다 StackOverflow