python:urllib2 使用不同的网络接口

6 投票
2 回答
2066 浏览
提问于 2025-04-17 06:55

我有以下这段代码:

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

这样,你就可以强制系统将套接字绑定到你想要的网络接口上。

撰写回答