Node.js/TypeScript代理脚本自动选择NTLM凭据选项失败求助
解决终端交互选择第一个选项失败的问题
核心问题排查与修复方案
输入时机不匹配:终端的选项提示是异步输出的,若在提示出现前就发送输入,会导致输入被忽略或被后续输出干扰。
修复逻辑:监听stdout的data事件,匹配到包含「User credentials (NTLM)」的提示内容后,再发送选择指令。
示例代码:process.stdout.on('data', (chunk) => { const output = chunk.toString(); if (output.includes('User credentials (NTLM)')) { // 兼容不同系统终端的换行符 process.stdin?.write('1\r\n'); } });换行符格式错误:Windows终端用
\r\n作为确认输入的换行符,仅发送\n可能无法被识别。
修复逻辑:根据系统动态适配换行符,或直接发送\r\n(多数终端兼容该格式)。
示例代码:const newline = process.platform === 'win32' ? '\r\n' : '\n'; process.stdin?.write(`1${newline}`);终端原始模式干扰:若代理命令启用了终端原始模式,stdin输入不会被自动解析。
修复逻辑:临时关闭原始模式发送输入,必要时再恢复。
示例代码:process.stdin.setRawMode(false); process.stdin?.write('1\r\n'); // 业务需要时切回原始模式 process.stdin.setRawMode(true);输入缓冲延迟:部分终端程序会缓冲输出,导致提示检测时机滞后。
临时排查方案:添加微小延迟后发送输入(不推荐作为长期解决方案)。
示例代码:setTimeout(() => { process.stdin?.write('1\r\n'); }, 500);
调试技巧
- 打印
stdout的所有输出内容,确认选项提示的完整文本和出现时机,避免关键词匹配错误。 - 监听
stdin的data事件,验证发送的输入是否被终端正确接收。
内容的提问来源于stack exchange,提问作者john mahon
相关产品推荐
相关产品推荐

