2013-03-11 2 views
1

Я очень новичок в python. Я начинаю с извращения. Как я видел в документации Twisted, это может сделать прокси-сервер.python twisted HTTP Proxy

class MyProxy(proxy.Proxy): 
    pass 

class ProxyFactory(http.HTTPFactory): 
    protocol = MyProxy 

reactor.listenTCP(8080, ProxyFactory()) 
reactor.run() 

ProxyFactory::protocol выглядит как переменная-член? но MyProxy является typename, и я не знаю, это своего рода шаблон? иначе как я могу присвоить тип переменной?

То, что я действительно хочу достичь, - это просто отклонить запросы к определенным конечным точкам. Я думал о переопределении buildProtocol Но поставленный аргумент addr всегда 127.0.0.1

ответ

3

ProxyFactory.protocol - это атрибут класса Python. Поскольку Python является динамически типизированным языком, он обладает большей гибкостью, например, Java, как определяются переменные и классы.

MyProxy - это пустой класс подкласса Proxy, который не определяет поведение по сравнению с тем, что предоставляется по умолчанию в proxy.Proxy. То, что вам, вероятно, нужно сделать (я не эксперт в Twisted internals), заключается в том, чтобы изучить документацию класса proxy.Proxy и переопределить некоторые функции методов, переопределяя их в MyProxy, чтобы эти методы выполняли логику, которую вы ищете.

Если вы посмотрите исходный код из документации Twisted API, то, по-видимому, хорошим местом для добавления пользовательской логики будет ProxyRequest.procese(), где он начнет подключать удаленный узел после разбора входящего HTTP-запроса.

Таким образом, вы (возможно) потребуется подкласс класса ProxyRequest, поставить его в MyProxy с помощью requestFactory атрибута класса.