python:urllib2 使用不同的网络接口
我有以下这段代码:
f = urllib2.urlopen(url)
data = f.read()
f.close()
这段代码在一台有两个网络接口的机器上运行。我想指定代码使用哪个接口。具体来说,我希望它使用一个不同于默认使用的接口……但如果我能选择接口,我就能搞清楚哪个是哪个。
有什么最简单、最好的、最符合Python风格的方法来做到这一点吗?
2 个回答
2
如果你使用Twisted的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
了。
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))
这样,你就可以强制系统将套接字绑定到你想要的网络接口上。