Python: можно ли установить клиентский порт с помощью xmlrpclib?
Можно ли установить клиентский порт для xmlrpc-соединения?
Я хочу сказать:
Клиент должен создать объект ServerProxy для определенного клиентского порта
или псевдокод что-то вроде этого:
serv = xmlrpclib.ServerProxy("server:port","overSpecificClientPort").
2 ответа
Попробуйте определить собственный транспорт. Это должно быть что-то вроде этого:
import xmlrpclib, httplib
class sourcedTransport(xmlrpclib.Transport):
def setSource(self, src):
self.src = src
def make_connection(self, host):
h = httplib.HTTPConnection(host, source_address= self.src)
return h
srcPort = 43040
srcAddress = ('', srcPort)
p = sourcedTransport()
p.setSource(srcAddress)
server = xmlrpclib.ServerProxy("server:port", transport=p)
РЕДАКТИРОВАТЬ: исправление ошибки httplib.HTTP => httplib.HTTPConnection
И проверил, что это работает, в Python 2.7 (но не раньше)
В модуле xmlrpclib этого нет, но вы можете создать свой собственный, изменив исходную версию. Предполагая, что вы используете Linux, получите /usr/lib/python2.7/xmlrpclib.py
, Изменить метод make_connection
соответственно.
Предоставление параметра source_address
в HTTPConnection
поддерживается httplib не ранее Python версии 2.7.
Повеселись!