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

如何在Puppeteer中获取完整的请求头信息?

如何用Puppeteer获取完整请求头

嘿,我之前也踩过这个坑!默认的req.headers()确实只能拿到咱们可以手动修改的那部分请求头,像浏览器自动注入的Host、Cookie、Accept-Encoding这类关键头信息,是不会出现在这个方法的返回结果里的。要拿到真正完整的请求头,得借助Chrome DevTools Protocol(CDP)直接监听网络层的事件,这是最靠谱的解决方案。

下面是修改后的代码示例,亲测有效:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
  
  // 建立和CDP的连接,直接操作浏览器的网络层
  const cdpClient = await page.target().createCDPSession();
  // 启用Network模块,这样才能监听网络请求事件
  await cdpClient.send('Network.enable');
  
  // 监听requestWillBeSent事件,这个事件会在浏览器发送请求前触发,包含完整请求信息
  cdpClient.on('Network.requestWillBeSent', (eventParams) => {
    console.log(`请求URL: ${eventParams.request.url}`);
    console.log('完整请求头:', eventParams.request.headers);
    console.log('------------------------');
  });
  
  await page.goto('https://reddit.com');
  
  // 记得按需关闭浏览器
  // await browser.close();
})();

关键说明:

  • CDP是Chrome浏览器提供的底层调试协议,Puppeteer本身也是基于它实现的,但默认的request事件做了封装,隐藏了一些底层细节。
  • Network.requestWillBeSent事件返回的eventParams.request.headers包含了浏览器发送的所有请求头,不管是自定义的还是自动添加的。
  • 如果需要过滤特定类型的请求(比如只看文档请求,忽略图片、脚本),可以通过eventParams.type字段来判断,比如eventParams.type === 'Document'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:47:29