プロキシ URL は直接設定すれば機能しますが、同じ値を Windows のバッチファイルに移した後で認証が失敗します。HTTP クライアントが URL を受け取る前に、バッチパーサーがパーセント記号を変更したかどうかを確認してください。

表現は 2 つあります。URL エンコードではバックスラッシュを %5C、疑問符を %3F として表せます。バッチファイルのコマンド内でリテラルのパーセント記号は %% とエスケープする必要があります。

例として domain\user というアカウントにプレースホルダーのパスワード pass? を使う場合、.bat ファイルには次のように書けます:

set "https_proxy=http://domain%%5Cuser:pass%%[email protected]:8080"

その後に起動されるプロセスは domain%5Cuser:pass%3F を含む URL を受け取るはずです。二重のパーセント記号はバッチのソースに属するものであり、クライアントが保存するプロキシ URL のものではありません。

そのバッチの綴りを .npmrc ファイルやアプリケーションのプロキシ欄にコピーしないでください。これらの入力は同じバッチ解析の段階を通りません。同様に、この例は PowerShell の構文ではありません。CALL や 2 つ目のシェル向けに組み立てたコマンドなど別のラッパーは、さらに別の解析パスを加える可能性があり、独自の確認が必要です。

示されているように SET の代入を引用符で囲み、偶発的な空白やシェルのメタ文字が意図しないコマンドの一部にならないようにしてください。引用符だけではパーセントの展開を防げません。

結果を確認するときは、パスワードを含む URL を共有ログに出力するのではなく、期待されるエンコードを伏せ字にした表現と比較してください。シェルのエスケープを修正しても資格情報は保持されますが、クライアントがもともと対応していなかった認証方式を選ぶわけではありません。

関連記事