Как получить исходное имя хоста TCP-соединения в Python Twisted?

При использовании TCP-механизмов Twisted при создании протокола единственной информацией о партнере является его IP-адрес и порт. Как я могу получить исходное имя хоста, с которым я пытался подключиться?

reactor.connectTCP('somehost.com', 80, MyFactory)

Как я могу каким-то образом получить 'somehost.com' через обратный вызов? Другими словами, connectTCP возвращает IConnector (что бы он ни делал) — как мне сопоставить это с чем-то осязаемым в обратном вызове, если не используются отложенные вызовы?


person Oliver Zheng    schedule 23.02.2010    source источник


Ответы (2)


Ответ Джеруба имеет смысл семантически. Покопавшись в коде Twisted, я нашел более удобный и прямой способ сделать именно то, чего я пытаюсь достичь.

В протоколе:

def connectionMade(self):
    # This is the original connector that connectTCP returned
    connector = self.transport.connector

    # This is the original destination requested
    connector.getDestination()
person Oliver Zheng    schedule 23.02.2010
comment
Как мне получить это из render_GET или render_POST? Объект request имеет атрибут transport, но не имеет атрибута connector. Ни у Resource, ни у Site нет рядом .getDestination(). - person Adam Barnes; 31.07.2016

Простой ответ: «Запишите сами».

Обновление вашего примера:

myfactory = MyFactory(connecthost='somehost.com')
reactor.connectTCP(myfactory.connecthost, 80, myfactory)

Если это важная часть информации, вы должны явно передавать ее явно, почти так же, как вы передаете подробности о том, почему вы подключились к хосту и что делать после установления соединения.

person Jerub    schedule 23.02.2010