複数のローカルアドレスを持つマシンでは、転送プロキシへの接続にそのうちの 1 つが必要になることがあります。cURL は両方の選択を明示的に行えます:

curl_setopt_array($handle, [
    CURLOPT_URL => 'https://example.com/',
    CURLOPT_INTERFACE => '192.0.2.20',
    CURLOPT_PROXY => 'http://proxy.example:8080',
]);

これは既存の cURL ハンドルに対する例示的な構成です。192.0.2.20 を、PHP を実行しているマシンで実際に利用可能な送信元アドレスに置き換えてください。プロキシ アカウントなしで許可された公開リクエストには、HTTPプロキシ一覧 からプロキシ値用のリモート リスナーを提供できます。

CURLOPT_INTERFACE は外向き接続のローカル側を選択します。CURLOPT_PROXY はリクエストを先へ運ぶ中継役を選択します。ローカル送信元を選んでも、そのマシンがリモート プロキシになるわけでも、任意のパブリック IP が与えられるわけでもありません。

この経路では、ローカルの選択がプロキシへの接続に影響します。Web サイトは通常 プロキシの次の送信元アドレス を見ます。どちらかのペアの間の NAT は、各受信者が見るアドレスをさらに変換することがあります。

インターフェースの選択を省略すると、libcurl は TCP スタックに適切な送信元を選ばせます。その選択はマシンのネットワーク構成に従います。構成ファイルの最初のアドレスが必ず勝つという普遍的な規則はありません。

libcurl は対応プラットフォームでインターフェース名を受け付けますが、そのドキュメントはこのオプションで Windows のインターフェース名の選択を除外しています。ホスト名を使うとブロックする検索が発生することもあります。アプリケーションが意図する選択がそれである場合、既知のローカル アドレスの方が明確な入力です。

関連記事