问题
I have the following code:
f = urllib2.urlopen(url)
data = f.read()
f.close()
It's running on a machine with two network interfaces. I'd like to specify which interface I want the code to use. Specifically, I want it to use the one other than the one it is using by default... but I can figure out which is which if I can just pick the interface.
What's the easiest/best/most pythonic way to do this?
回答1:
Not yet a complete solution, but if you were using only simple socket objects, you could do what you need this way :
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))
Thus, you will force the system to bind the socket to the wanted network interface.
回答2:
If you use Twisted's twisted.web.client.Agent, then you can achieve this via:
from twisted.internet import reactor
from twisted.web.client import Agent
agent = Agent(reactor, bindAddress=("10.0.0.1", 0))
And then using agent
in the usual way.
来源:https://stackoverflow.com/questions/8245810/python-urllib2-using-different-network-interface