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

Node.js Express:本地可访问URL在Heroku/Vercel生产环境超时求助

问题原因分析与解决方案

核心原因

目标图片域名prodimage.images-bn.com的服务器存在IP地域/身份限制:

  • Heroku、Vercel的服务器IP段属于云服务商公开IP,大概率被该站点的反爬或访问控制策略拉黑;
  • 服务器端发起的请求默认UA等头信息过于简单,被识别为非用户端请求(爬虫/服务器脚本),直接被拦截导致超时。

可行解决方案

1. 模拟真实浏览器请求头

给服务器端请求添加完整的浏览器请求头,伪装成正常用户访问:

const axios = require('axios');

async function fetchTargetImage() {
  try {
    const res = await axios.get('https://prodimage.images-bn.com/pimages/2940161410400_p0_v1_s550x406.jpg', {
      headers: {
        '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': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Referer': 'https://www.barnesandnoble.com/'
      },
      timeout: 15000
    });
    return res.data;
  } catch (err) {
    console.error('请求失败:', err.message);
  }
}

2. 前端直接加载图片(最优方案)

如果业务逻辑允许,不要在服务器端转发请求,直接将图片URL返回给前端,让用户浏览器发起请求:

// Express路由示例
app.get('/api/book-image', (req, res) => {
  res.json({
    imageUrl: 'https://prodimage.images-bn.com/pimages/2940161410400_p0_v1_s550x406.jpg'
  });
});

前端通过<img src={imageUrl} />直接加载,利用用户本地IP和浏览器头避开限制。

3. 使用住宅代理服务

如果必须在服务器端发起请求,使用住宅代理(模拟真实用户家庭IP)转发请求,避开云服务商IP黑名单。可以选择支持Node.js的代理服务,将请求通过代理IP发送。

4. 检查站点robots规则

访问https://prodimage.images-bn.com/robots.txt确认是否存在明确的爬虫禁止规则,如果是官方禁止的爬取行为,需考虑更换图片来源或联系站点获取授权。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:48:16