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

Node.js使用https模块发送带Header的GET请求时遇错误求助

解决Node.js https模块GET请求被Cloudflare拦截的错误

我之前也踩过一模一样的坑!你看到的这个HTML错误页面是Cloudflare返回的,意思是你的请求被CDN判定为非合法请求(比如像机器人发出的),所以直接被拦截了。最常见的原因就是请求头配置不完整,下面给你一步步解决的方案:

1. 优先补全核心请求头

绝大多数被Cloudflare保护的服务器,会直接拒绝没有User-Agent的请求,这是最容易忽略的点。另外补充Accept、Accept-Language等浏览器常用头,能让你的请求更贴近正常用户的浏览器请求,避免被拦截。

2. 完整的请求示例代码

把你的请求配置改成类似这样,替换成你的目标域名和路径即可:

const https = require('https');

const requestOptions = {
  hostname: 'your-target-domain.com', // 注意不要加http/https前缀
  path: '/your-target-path',
  method: 'GET',
  headers: {
    // 模拟Chrome浏览器的User-Agent,你也可以换成其他浏览器的UA
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
    // 如果目标网站有防盗链要求,还可以添加Referer头
    // 'Referer': 'https://your-target-domain.com/'
  }
};

const req = https.get(requestOptions, (res) => {
  console.log(`响应状态码: ${res.statusCode}`);
  
  // 收集完整响应数据
  let responseData = '';
  res.on('data', (chunk) => {
    responseData += chunk;
  });
  
  res.on('end', () => {
    console.log('响应内容:', responseData);
  });
});

// 监听请求错误
req.on('error', (err) => {
  console.error('请求失败:', err.message);
});

req.end();

3. 其他可能的排查点

  • 确认hostname和path是否正确:hostname不要包含https://,path要写完整路由(比如/api/data而不是只写api/data)
  • 如果目标网站需要登录才能访问,得在headers里添加Cookie头,值可以从浏览器登录后的Cookie中复制
  • 如果还是被拦截,可能是Cloudflare触发了人机验证,这种情况单纯用https模块无法绕过,得用Puppeteer这类模拟真实浏览器的工具

内容的提问来源于stack exchange,提问作者Aneela Saleem Ramzan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:40:06