(exec, params = {})
| 331 | |
| 332 | const executor = { |
| 333 | async windows (exec, params = {}) { |
| 334 | const { ip, port, setEnv, setCaBundle } = params |
| 335 | if (ip != null) { // 设置代理 |
| 336 | // 延迟加载config |
| 337 | loadConfig() |
| 338 | |
| 339 | log.info('开始设置windows系统代理:', ip, port, setEnv) |
| 340 | |
| 341 | // https |
| 342 | let proxyAddr = `https=http://${ip}:${port}` |
| 343 | // http |
| 344 | if (config.get().proxy.proxyHttp) { |
| 345 | proxyAddr = `http=http://${ip}:${port - 1};${proxyAddr}` |
| 346 | } |
| 347 | |
| 348 | // 读取排除域名 |
| 349 | const excludeIpStr = getProxyExcludeIpStr(';') |
| 350 | // 设置代理,同时设置排除域名 |
| 351 | try { |
| 352 | require('@starknt/sysproxy').triggerManualProxyByUrl(true, proxyAddr, excludeIpStr, true) |
| 353 | log.info(`设置windows系统代理成功: ${proxyAddr} ......(省略排除IP列表)`) |
| 354 | } catch (e1) { |
| 355 | log.warn('设置windows系统代理失败:执行 `@starknt/sysproxy` 失败,现尝试通过执行 `sysproxy.exe global ...` 来设置系统代理!\r\n捕获的异常:', e1) |
| 356 | |
| 357 | const proxyPath = extraPath.getProxyExePath() |
| 358 | const execFun = 'global' |
| 359 | try { |
| 360 | await execFile(proxyPath, [execFun, proxyAddr, excludeIpStr]) |
| 361 | log.info(`设置windows系统代理成功,执行的命令:${proxyPath} ${execFun} ${proxyAddr} ......(省略排除IP列表)`) |
| 362 | } catch (e2) { |
| 363 | log.error(`设置windows系统代理失败,执行的命令:${proxyPath} ${execFun} ${proxyAddr} ......(省略排除IP列表), error:`, e2) |
| 364 | throw e1 // 将上面的异常抛出 |
| 365 | } |
| 366 | } |
| 367 | |
| 368 | if (setEnv) { |
| 369 | // 设置全局代理所需的环境变量 |
| 370 | try { |
| 371 | await exec(`echo '设置环境变量 HTTPS_PROXY${config.get().proxy.proxyHttp ? '、HTTP_PROXY' : ''}${setCaBundle ? '、REQUEST_CA_BUNDLE' : ''}'`) |
| 372 | |
| 373 | log.info(`开启系统代理的同时设置环境变量:HTTPS_PROXY = "http://${ip}:${port}/"`) |
| 374 | await exec(`setx HTTPS_PROXY "http://${ip}:${port}/"`) |
| 375 | |
| 376 | if (config.get().proxy.proxyHttp) { |
| 377 | log.info(`开启系统代理的同时设置环境变量:HTTP_PROXY = "http://${ip}:${port - 1}/"`) |
| 378 | await exec(`setx HTTP_PROXY "http://${ip}:${port - 1}/"`) |
| 379 | } |
| 380 | |
| 381 | if (setCaBundle) { |
| 382 | const caCertPath = config.get().server.setting.rootCaFile.certPath |
| 383 | log.info(`开启系统代理的同时设置环境变量:REQUEST_CA_BUNDLE = "${caCertPath}"`) |
| 384 | await exec(`setx REQUEST_CA_BUNDLE "${caCertPath}"`) |
| 385 | } |
| 386 | |
| 387 | // await addClearScriptIni() |
| 388 | } catch (e) { |
| 389 | log.error('设置环境变量 HTTPS_PROXY、HTTP_PROXY、REQUEST_CA_BUNDLE 失败:', e) |
| 390 | } |
nothing calls this directly
no test coverage detected