Ubuntu 20.04下Node.js中如何让google-auth-library请求优先用IPv4
强制特定谷歌端点请求优先使用IPv4的方案
以下是几种不影响全局IPv6使用、仅针对google-auth-library中OAuth2Client的请求强制IPv4的方案:
方案一:为OAuth2Client配置IPv4专属HTTPS Agent
直接给OAuth2Client的内部HTTP客户端指定强制使用IPv4的Agent,所有该客户端发起的请求都会走IPv4解析,不会干扰全局的fetch或其他请求。代码示例:
const { OAuth2Client } = require('google-auth-library'); const https = require('https'); // 创建仅支持IPv4的HTTPS Agent const ipv4HttpsAgent = new https.Agent({ family: 4 }); // 初始化OAuth2Client时注入自定义Agent const oAuth2Client = new OAuth2Client({ clientId: '你的客户端ID', clientSecret: '你的客户端密钥', httpClient: { agent: ipv4HttpsAgent } });方案二:针对特定域名定制DNS lookup逻辑
如果只想针对www.googleapis.com这个域名强制IPv4解析,其他域名仍保持默认的IPv6优先,可以自定义Agent的lookup函数,仅在目标域名时指定IPv4家族。代码示例:
const { OAuth2Client } = require('google-auth-library'); const dns = require('dns'); const https = require('https'); const ipv4TargetAgent = new https.Agent({ lookup: (hostname, options, callback) => { // 仅对目标域名强制使用IPv4解析 if (hostname === 'www.googleapis.com') { options.family = 4; } dns.lookup(hostname, options, callback); } }); const oAuth2Client = new OAuth2Client({ clientId: '你的客户端ID', clientSecret: '你的客户端密钥', httpClient: { agent: ipv4TargetAgent } });方案三:修改Axios全局配置(谨慎使用)
如果你的项目中Axios是全局使用的,且希望所有指向谷歌端点的Axios请求都走IPv4,可以给Axios全局设置Agent。注意这会影响所有Axios请求,若有其他需要IPv6的Axios请求则不适用。代码示例:
const axios = require('axios'); const https = require('https'); axios.defaults.httpsAgent = new https.Agent({ family: 4 });
内容的提问来源于stack exchange,提问作者LAZ
相关产品推荐
相关产品推荐

