でいくつかのリクエストを行うスクリプトがあります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 キーワード) として渡すようです。上記はあなたが望むものだと思いますが、テストするデュアルホームマシンがありません。kwargs
set_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)