cURL のプロキシポートと宛先ポート
HTTPS サービスのポートは宛先 URL に、中継者のポートはプロキシ URL に置き、CURLOPT_PORT で上書きしないようにします。
ポート 8443 の HTTPS サービスは、ポート 8080 の HTTP プロキシ経由で到達できます。これらの数字は異なる接続を表しています。
$handle = curl_init('https://api.example:8443/status');
curl_setopt($handle, CURLOPT_PROXY, 'http://proxy.example:8080');
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
実行、エラー処理、ハンドルのライフサイクルは引き続きアプリケーションが担います。このスニペットは証明書の検証を変えずに、ルーティングの入力だけをまとめています。
cURL はまず proxy.example:8080 に接続します。この HTTPS 宛先では、トンネル要求は api.example:8443 を指定し、TLS の識別名は api.example のままです。
CURLOPT_PORT は宛先ポートの上書きであり、プロキシのポートではありません。URL が https で始まるたびに 443 を設定すると、意図的に 8443 で公開しているサービスを上書きしてしまいます。libcurl は、このオプションを使うのではなく URL でポートを選ぶことを勧めています。
ハンドルを再利用するときは、以前の明示的なポート上書きも考慮してください。新しい URL を指定しても、矛盾したまま残るオプションの解釈が楽になるわけではありません。
中継者は選択した宛先ポートへの CONNECT を許可する必要があります。8443 の拒否は、プロキシのリスナーを移す理由にも TLS 検証を無効にする理由にもなりません。