次のコードがあります。
f = urllib2.urlopen(url)
data = f.read()
f.close()
2 つのネットワーク インターフェイスを備えたマシンで実行されています。コードで使用するインターフェイスを指定したいと思います。具体的には、デフォルトで使用しているものとは別のものを使用したいのですが、インターフェイスを選択するだけでどれがどれであるかがわかります。
これを行うための最も簡単/最良/最もpythonicな方法は何ですか?
次のコードがあります。
f = urllib2.urlopen(url)
data = f.read()
f.close()
2 つのネットワーク インターフェイスを備えたマシンで実行されています。コードで使用するインターフェイスを指定したいと思います。具体的には、デフォルトで使用しているものとは別のものを使用したいのですが、インターフェイスを選択するだけでどれがどれであるかがわかります。
これを行うための最も簡単/最良/最もpythonicな方法は何ですか?
まだ完全な解決策ではありませんが、単純なソケット オブジェクトのみを使用している場合は、次の方法で必要なことを行うことができます。
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))
したがって、システムがソケットを目的のネットワーク インターフェイスにバインドするように強制します。
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
、通常の方法で使用します。