でいくつかのリクエストを行うスクリプトがありますurllib2。
スタック オーバーフローの他の場所で提案されているトリックを使用して、別の IP をアプリケーションにバインドします。私のコンピューターには 2 つの IP アドレス (IP A と IP B) があります。
requestsライブラリの使用に切り替えたい。そのライブラリで同じ機能を実現する方法を知っている人はいますか?
でいくつかのリクエストを行うスクリプトがありますurllib2。
スタック オーバーフローの他の場所で提案されているトリックを使用して、別の IP をアプリケーションにバインドします。私のコンピューターには 2 つの IP アドレス (IP A と IP B) があります。
requestsライブラリの使用に切り替えたい。そのライブラリで同じ機能を実現する方法を知っている人はいますか?
requestsモジュールを調べてみるとhttplib、http リクエストの送信に使用されているようです。www ホストへの接続にhttplib使用します。socket.create_connection()
それを知って、あなたが提供したリンクの猿のパッチ方法に従ってください:
import socket
real_create_conn = socket.create_connection
def set_src_addr(*args):
    address, timeout = args[0], args[1]
    source_address = ('IP_ADDR_TO_BIND_TO', 0)
    return real_create_conn(address, timeout, source_address)
socket.create_connection = set_src_addr
import requests
r = requests.get('http://www.google.com')
内部の dictを拡張しようとして失敗したhttplibため、すべての引数 ( to create_connection()) を args (vs キーワード) として渡すようです。上記はあなたが望むものだと思いますが、テストするデュアルホームマシンがありません。kwargsset_src_addr
実際には、次のようなリクエストにIP をバインドする必要があります。
import urllib3
real_create_conn = urllib3.util.connection.create_connection
def set_src_addr(address, timeout, *args, **kw):
    source_address = ('YOUR_BIND_IP', 0)
    return real_create_conn(address, timeout=timeout, source_address=source_address)
urllib3.util.connection.create_connection = set_src_addr
import requests
r = requests.get('http://ipecho.net/plain')
print( r.text)