2

我是扭曲库的新手,我正在尝试编写一个具有特定功能的简单反向代理。对于大多数 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, '')

它工作正常。

谁能看到我做错了什么?

4

1 回答 1

0

看了这个之后,我尝试在传递给 ReverseProxyResource 的路径前添加一个“/”。换句话说,我改变了这个:

return proxy.ReverseProxyResource(self.host, self.port, path)

对此

return proxy.ReverseProxyResource(self.host, self.port, '/' + path)

那解决了它!

于 2013-06-17T14:43:25.727 回答