我正在寻找一种方法来使用node-fetch为nodejs请求使用自定义DNS解析器。我认为这里有一个解释的星星:Node override request IP resolution,但我无法管理它对任何请求都有效。我的目标是使用替代DNS解析器,如cloudflare(1.1.1.1)或Google公共DNS(8.8.8.8),而不是OS / ISP默认的DNS解析。
import http from "http";
import https from "https";
import fetch from "node-fetch";
const staticLookup = (ip: string, v?: number) => (hostname: string, _: null, cb: Function) => {
cb(null, ip, v || 4);
};
const staticDnsAgent = (scheme: "http" | "https", ip: string) => {
const httpModule = scheme === "http" ? http : https;
return new httpModule.Agent({ lookup: staticLookup(ip), rejectUnauthorized: false });
};
// Both request are not working
fetch(`https://api.github.com/search/issues?q=Hello%20World`, {
agent: staticDnsAgent("https", "1.1.1.1")
})
fetch(`http://jsonplaceholder.typicode.com/todos`, {
agent: staticDnsAgent("http", "8.8.8.8")
})
字符串
我正在努力寻找一种方法来使这个例子工作,我很确定我必须使用nodejs DNS模块并设置一个自定义服务器。
2条答案
按热度按时间stszievb1#
感谢Martheen在我的第一篇文章中回答,我能够在这里实现结果:
字符串
ni65a41a2#
要在Node.js脚本中为所有
fetch()
请求使用自定义DNS服务器,您可以使用undici库配置全局请求代理。**第一步:**安装
undici
如下:字符串
**第二步:**使用您的DNS服务器配置设置全局代理:
型
这已经用Node.js v18测试过了。注意,
node-fetch
包不是必需的。