在批处理文件中保持已编码的代理凭据完整
在把 Windows 命令移入 .bat 文件时,保留经过百分号编码的代理用户名和密码。
代理 URL 在直接配置时可用,但把同一个值移入 Windows 批处理文件后,身份验证就失败了。请检查批处理解析器是否在 HTTP 客户端收到 URL 之前改动了百分号。
存在两种不同的表示方式。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 或为第二个 shell 构造的命令,可能引入又一轮解析,需要单独审查。
像示例那样给 SET 赋值加上引号,以免偶然的空格或 shell 元字符变成非预期命令的一部分。仅靠引号并不能阻止百分号展开。
检查结果时,应把预期的编码与经过遮盖处理的表示进行比较,而不是把带密码的 URL 打印到共享日志中。修复 shell 转义可以保留凭据;它不会选择客户端原本不支持的认证方案。