2013-06-17 3 views
2

Я новичок в скрученной библиотеке, и я пытаюсь написать простой обратный прокси с определенной функцией. Для большинства URL-адресов сервер должен действовать как обратный прокси, но для URL-адресов, соответствующих регулярному выражению, он должен обслуживать их самостоятельно. Я прочитал витую документацию по динамической диспетчеризации и придумали следующее:Динамическая отправка URL с Twisted ReverseProxyResource

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() 

Когда я бегу, что сервер попадает в ValueError, пытаясь не разобрать значение заголовка Cache-Control «не-кэш», как Код состояния HTTP. Итак, что-то пошло не так.

Когда я заменить строку:

root = LocalOrRemoteResource('remote.server', 80, '') 

с этим

root = proxy.ReverseProxyResource('remote.server', 80, '') 

он работает отлично.

Может ли кто-нибудь увидеть, что я делаю неправильно?

ответ

0

После просмотра this, я попробовал добавить '/' к пути, который я передаю в ReverseProxyResource. Другими словами, я изменил это:

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

к этому

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

Это установил ее!

Смежные вопросы