Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Python: Общие вопросы > выбор интерфейса |
Автор: demoriz 29.4.2009, 16:47 | ||
На сервере (VPS debian) шесть IP адресов на шести интерфейсах venet0:0 venet0:1 venet0:2 и тд. Есть робот который выходит в интрернет для сбора информации с одного сайта. Для выхода использую urllib2.
Как можно заставить скрипт по очереди использовать все IP адреса? Как самому на программном уровне выбирать через какой интерфейс выходить в интернет? |
Автор: spSerg 29.4.2009, 17:34 | ||
На сокетах делается просто:
Надеюсь подскажет, куда копать. |
Автор: spSerg 29.4.2009, 18:31 | ||||||||
После небольших копаний нашел, как можно добраться к моменту подключения. Даю черновик, не более. Нужно создать свой класс для обработки HTTP подключений таких как httplib.HTTPConnection
переопределяем еще один класс-обработчик, которым заменим стандартный в цепочке
#Создаем свой Opener со своим обработчиком, который заменит HTTPHandler:
Подменяем основной Opener из urllib2
Дальше пользуемся как обычно. и наслаждаемся. Надеюсь, это поможет. |
Автор: demoriz 29.4.2009, 20:47 |
Всё великолепно за исключением пару моментов ![]() что за класс AbstractHTTPHandler и что обьявлять в конструкторе класса MyHTTPConnection |
Автор: spSerg 30.4.2009, 13:12 | ||||
Как дети... А как я нашел это все? ![]() Поиск по исходникам в стандартной библиотеке приводит к тому, что класс AbstractHTTPHandler находим внутри urllib2. Значит, исправляем AbstractHTTPHandler на urllib2.AbstractHTTPHandler. А если найти класс httplib.HTTPConnection, то обнаруживаем его конструктор:
Итого, в нашем классе будет такой конструктор:
Повторюсь еще раз - только в качестве черновика. (это не практический рабочий пример, а лишь его наброски) |
Автор: demoriz 30.4.2009, 14:18 | ||||
Сорри за глупость, только неделю как взялся python осваивать, и мне ещё сложно ориентироваться в модулях и библиотеках. но проблема не решилась :(
для примера сделал так:
в итоге апач сайта зарегестрировал коннект с 77.221.155.141 хотя стоит self.sock.bind(('77.221.159.148', 80)) ![]() |
Автор: spSerg 30.4.2009, 15:33 |
Если ты можешь фиксировать коннекты апачем, то для начала стоит попробовать самый первый фрагмент с сокетами. Он удобен тем, что его можно напрямую в интерпретаторе выполнять, и видеть, что получается. |
Автор: demoriz 30.4.2009, 15:55 | ||||
ошибка
Добавлено через 10 минут и 31 секунду Виноват, это просто апачь порт занимал вышеописанный пример работает ![]() Добавлено через 12 минут и 53 секунды а возможно както сделать чтобы с апачем работало без конфликта? |
Автор: spSerg 30.4.2009, 18:02 |
Если обратил внимание и сравнил с рабочим последним семплом, то у меня в черновике ошибка. Сначала нужно привязаться, а потом коннектиться. А не наоборот, как в черновике. ![]() |
Автор: demoriz 1.5.2009, 10:28 |
ага заметил это 15 и 17 строки спасибо запомощь, жаль плюсануть немогу |