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

请求https://www.norwegian.com/en持续返回Status code 403而非200求助

解决请求norwegian.com返回403的问题

我之前也遇到过类似的反爬拦截情况,403状态码通常意味着网站已经识别出你的请求不是来自真实浏览器——哪怕你复制了请求头,可能还有几个关键点没覆盖到,下面给你分析原因和针对性的解决方案:

可能的触发原因

  • 缺少会话Cookie:很多网站会在首次请求时设置Cookie,后续请求需要携带这些Cookie才能通过验证,你当前的代码没有处理Cookie的存储和自动携带逻辑。
  • request库的隐式行为差异:虽然你复制了请求头,但request库在一些细节上和浏览器不同,比如默认不自动跟随重定向,或者没有显式设置Host头(部分网站会严格校验这个字段)。
  • JS级反爬检测:部分网站会通过JavaScript检测浏览器环境(比如是否存在window对象、能否执行特定JS逻辑),而request是纯HTTP请求库,没有JS引擎,直接被拦截。

具体解决方案

1. 启用Cookie会话并补充关键请求头

修改你的代码,添加CookieJar维护会话,同时显式指定Host头,模拟真实浏览器的Cookie存储和请求逻辑:

const request = require('request');
const cheerio = require('cheerio');
const jar = request.jar(); // 创建Cookie容器,模拟浏览器的Cookie存储

let options = {
 url: 'https://www.norwegian.com/en',
 headers: {
   "Cache-Control": "max-age=0",
   "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
   "Accept-Encoding": "gzip, deflate, br",
   "Accept-Language": "en-US,en;q=0.5",
   "Connection": "keep-alive",
   "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0",
   "Host": "www.norwegian.com" // 显式指定Host,避免库自动生成的差异
 },
 jar: jar, // 启用CookieJar自动管理Cookie
 followAllRedirects: true, // 自动跟随重定向,模拟浏览器行为
 gzip: true // 支持gzip压缩,匹配请求头里的Accept-Encoding
};

request(options, function (err, resp, html) {
 if (err) {
   console.error('请求出错:', err);
   return;
 }
 console.log('状态码:', resp.statusCode);
 if (resp.statusCode === 200) {
   const $ = cheerio.load(html);
   // 这里可以正常处理页面内容了
   console.log('页面标题:', $('title').text());
 } else {
   // 打印响应头,看看有没有拦截提示
   console.log('响应头:', resp.headers);
 }
})

2. 使用无头浏览器绕过JS检测

如果上面的方法还是返回403,说明网站可能有JS级别的反爬,这时候用puppeteer(无头Chrome)模拟真实浏览器环境是更可靠的选择:

首先安装puppeteer:

npm install puppeteer

然后编写代码:

const puppeteer = require('puppeteer');
const cheerio = require('cheerio');

(async () => {
 // 启动无头浏览器,设置headless: false可以看到真实浏览器的运行过程
 const browser = await puppeteer.launch({ headless: 'new' });
 const page = await browser.newPage();

 // 设置和你之前一致的User-Agent
 await page.setUserAgent('Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0');

 // 访问页面,等待网络空闲后再获取内容,确保页面加载完成
 const response = await page.goto('https://www.norwegian.com/en', { waitUntil: 'networkidle2' });
 console.log('状态码:', response.status());

 // 获取页面HTML并解析
 const html = await page.content();
 const $ = cheerio.load(html);
 console.log('页面标题:', $('title').text());

 await browser.close();
})();

注意事项

  • 请务必遵守目标网站的robots.txt和使用条款,避免频繁请求给服务器造成压力,否则可能会被永久封禁IP。
  • 部分网站可能还有更严格的反爬机制(比如IP封禁、验证码),这类场景下需要谨慎使用代理IP或验证码识别服务,避免违反网站规则。

内容的提问来源于stack exchange,提问作者M.Baranauskas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:49:05