python: urllib2, использующий другой сетевой интерфейс - PullRequest
6 голосов
/ 23 ноября 2011

У меня есть следующий код:

f = urllib2.urlopen(url)
data = f.read()
f.close()

Он работает на машине с двумя сетевыми интерфейсами.Я хотел бы указать, какой интерфейс я хочу использовать код.В частности, я хочу, чтобы он использовал тот, который он использует по умолчанию ... но я могу понять, какой именно, если я могу просто выбрать интерфейс.питонский способ сделать это?

Ответы [ 2 ]

3 голосов
/ 23 ноября 2011

Пока еще не полное решение, но если бы вы использовали только простые объекты сокетов, вы могли бы сделать то, что вам нужно, следующим образом:

import socket
s = socket.socket()
s.bind(("127.0.0.1", 0))    # replace "127.0.0.1" by the local IP of the interface to use
s.connect(("remote_server.com", 80))

Таким образом, вы заставите систему привязать сокет кхотел сетевой интерфейс.

2 голосов
/ 23 ноября 2011

Если вы используете Twisted's twisted.web.client.Agent, то вы можете достичь этого с помощью:

from twisted.internet import reactor
from twisted.web.client import Agent

agent = Agent(reactor, bindAddress=("10.0.0.1", 0))

А затем, используя agent обычным способом.

...