$proxy = 'http://'
    . rawurlencode($proxyUser) . ':'
    . rawurlencode($proxyPassword)
    . '@proxy.example:8080';

$client = new \Symfony\Component\HttpClient\CurlHttpClient([
    'proxy' => $proxy,
    'no_proxy' => 'localhost,internal.example',
]);
$response = $client->request('GET', 'https://api.example/items');
$status = $response->getStatusCode();

rawurlencode は ユーザー名とパスワードを個別に に適用されます。URL 全体をエンコードすると、リスナーを見つけるために必要なスキームとオーソリティの区切り文字までエンコードされます。

HTTP プロキシは CONNECT を介して HTTPS の API 接続を中継します。プロキシ アカウントは API 認証の代わりではなく、プロキシ ログインのために http_version を 2.0 に強制する必要はありません。

カンマ区切りの no_proxy リストは、意図した直接のホストを選択します。明示的なオプションがなければ、コンポーネントは代わりにサポートされている環境設定を使用できます。

これは CurlHttpClient を直接構築するため、PHP の cURL トランスポートが必要です。Symfony の汎用ファクトリでは別のバックエンドを選択できます。拒否が残る場合は、選択されたトランスポートを特定し、アカウントを宛先の Authorization ヘッダーに移すのではなく、プロキシ段階のエラーを保持します。

関連記事