node.js - 如何在 Node JS 中获取当前的系统代理?
问题描述
我正在制作一个节点应用程序,并且已经知道如何在需要时实现代理,我不确定我如何实际检查当前系统代理设置。
从我读到的内容来看,它应该在 process.env.http_proxy 中,但是在我的 Windows 代理设置中设置代理后,那是未定义的。
如何获得 NodeJS 中的当前代理设置?
解决方案
你可以使用NPM的 get-proxy-settings包。
它能够:
从注册表中的 Windows 上的 Internet 设置中检索设置
我刚刚在 Windows 10 上对其进行了测试,它能够获取我的代理设置。
或者,您可以查看它们的来源并自行执行此操作。以下是一些关键功能:
async function getProxyWindows(): Promise<ProxySettings> {
// HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
const values = await openKey(Hive.HKCU, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings");
const proxy = values["ProxyServer"];
const enable = values["ProxyEnable"];
const enableValue = Number(enable && enable.value);
if (enableValue > 0 && proxy) {
return parseWindowsProxySetting(proxy.value);
} else {
return null;
}
}
function parseWindowsProxySetting(proxySetting: string): ProxySettings {
if (!proxySetting) { return null; }
if (isValidUrl(proxySetting)) {
const setting = new ProxySetting(proxySetting);
return {
http: setting,
https: setting,
};
}
const settings = proxySetting.split(";").map(x => x.split("=", 2));
const result = {};
for (const [key, value] of settings) {
if (value) {
result[key] = new ProxySetting(value);
}
}
return processResults(result);
}
async function openKey(hive: string, key: string): Promise<RegKeyValues> {
const keyPath = `${hive}\\${key}`;
const { stdout } = await execAsync(`${getRegPath()} query "${keyPath}"`);
const values = parseOutput(stdout);
return values;
}
function getRegPath() {
if (process.platform === "win32" && process.env.windir) {
return path.join(process.env.windir as string, "system32", "reg.exe");
} else {
return "REG";
}
}
推荐阅读
- flutter - 扑腾解析平台中的订阅.on('open')等效项
- google-cloud-platform - Terraform 不应用我的分支的更改
- python - 仅列出 OneToOneField Django 中的特定值
- java - 更改条件内的数据类型
- gimp - 如何使用 python-fu 重命名图层
- java - Springboot应用程序启动后出现错误
- flutter - 单选列表平铺填充在颤动中不起作用
- flutter - 在堆栈下方添加小部件
- javascript - 在 mongoDB 中按天、周或月过滤数据
- laravel - 如何根据 Laravel 中的另一个切换显示最小值和最大值