私はツイスト ライブラリを初めて使用し、特定の機能を備えた単純なリバース プロキシを作成しようとしています。ほとんどの URL では、サーバーはリバース プロキシとして機能する必要がありますが、正規表現に一致する URL の場合は、それ自体を提供する必要があります。動的ディスパッチに関するねじれたドキュメントを読み、次のことを思いつきました。
local_urls = [
r'...',
]
class LocalResource(Resource):
def render(self, request):
return "Hello World"
class LocalOrRemoteResource(Resource):
def __init__(self, host, port, path):
Resource.__init__(self)
self.host = host
self.port = port
self.path = path
def getChild(self, path, request):
if any([re.match(url, path) for url in local_urls]):
return LocalResource()
else:
return proxy.ReverseProxyResource(self.host, self.port, path)
root = LocalOrRemoteResource('remote.server', 80, '')
site = server.Site(root)
reactor.listenTCP(8080, site)
reactor.run()
これを実行すると、Cache-Control ヘッダー値「no-cache」を HTTP ステータス コードとして解析しようとしているときに、サーバーが ValueError にヒットします。それで、何かが非常に間違っています。
行を置き換えると:
root = LocalOrRemoteResource('remote.server', 80, '')
これとともに
root = proxy.ReverseProxyResource('remote.server', 80, '')
それは正常に動作します。
誰かが私が間違っていることを見ることができますか?