You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js实现cURL --resolve等价请求,解决axios方案返回404问题

解决方案

核心原理

curl --resolve 的本质是强制将指定域名+端口的DNS解析指向自定义IP,同时保持请求头的Host字段为原域名,你之前返回404大概率是修改请求地址为IP后,没有正确设置Host头,导致服务端虚拟主机无法匹配到对应站点。


方案1:原生Node.js http模块实现

const http = require('http');

const options = {
  // 自定义解析的目标IP
  host: '127.0.0.1',
  port: 80,
  path: '/',
  // 必须保留原域名作为Host头,否则服务端无法识别站点
  headers: {
    'Host': 'www.example.com'
  }
};

http.get(options, (res) => {
  console.log(`响应状态码: ${res.statusCode}`);
  res.on('data', (chunk) => {
    console.log(chunk.toString());
  });
}).on('error', (e) => {
  console.error(`请求出错: ${e.message}`);
});

方案2:Axios实现(适配你当前的技术选型)

const axios = require('axios');
// https请求需要额外引入https模块
// const https = require('https');

async function customResolveRequest() {
  try {
    const res = await axios.get('http://127.0.0.1', {
      headers: {
        'Host': 'www.example.com'
      },
      // 如果是HTTPS请求,要加以下配置避免证书校验报错(证书是颁发给原域名的)
      // httpsAgent: new https.Agent({
      //   checkServerIdentity: (host, cert) => {
      //     if (cert.subject.CN === 'www.example.com') return undefined;
      //     return new Error('证书与目标域名不匹配');
      //   }
      // })
    });
    console.log('响应内容:', res.data);
  } catch (err) {
    console.error('请求出错:', err.response?.status || err.message);
  }
}

customResolveRequest();

方案3:全局自定义DNS解析(适合多请求批量配置场景)

如果有大量请求都需要自定义解析规则,可以直接覆盖DNS lookup逻辑,不用逐个修改请求配置:

const dns = require('dns');
const http = require('http');

// 自定义DNS解析规则
const customLookup = (hostname, options, callback) => {
  if (hostname === 'www.example.com') {
    // 匹配到目标域名直接返回自定义IP,4代表IPv4
    return callback(null, '127.0.0.1', 4);
  }
  // 其他域名走系统默认DNS解析
  return dns.lookup(hostname, options, callback);
};

// 请求时直接写原域名即可,不需要修改请求地址和Host头
http.get('http://www.example.com', {
  lookup: customLookup
}, (res) => {
  console.log('响应状态码:', res.statusCode);
  res.pipe(process.stdout);
});

内容的提问来源于stack exchange,提问作者Anish Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:24:00