6

我有以下代码:

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

它在具有两个网络接口的机器上运行。我想指定我希望代码使用哪个接口。具体来说,我希望它使用默认情况下使用的那个以外的那个......但是如果我可以选择接口,我可以弄清楚哪个是哪个。

最简单/最好/最pythonic的方法是什么?

4

2 回答 2

3

还不是一个完整的解决方案,但如果您只使用简单的套接字对象,您可以这样做:

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))

因此,您将强制系统将套接字绑定到所需的网络接口。

于 2011-11-23T17:06:45.473 回答
2

如果您使用 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以通常的方式使用。

于 2011-11-23T17:59:33.753 回答