如何在Puppeteer中获取attachment类型HTTP响应的Body内容
解决Puppeteer无法获取Attachment类型CSV响应体的问题
问题原因
当响应头包含content-disposition: attachment时,浏览器会自动触发下载流程,Puppeteer默认不会保留这类响应的body,导致调用response.buffer()或response.text()时出现TypeError。
解决方案1:拦截请求并阻止自动下载
通过开启请求拦截,阻止浏览器的默认下载行为,强制保留响应体以便读取:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); // 开启请求拦截 await page.setRequestInterception(true); page.on('request', (request) => { // 放行所有请求 request.continue(); }); page.on('response', async (response) => { // 筛选目标CSV响应 const contentDisposition = response.headers()['content-disposition']; if (contentDisposition && contentDisposition.includes('attachment') && response.url().includes('your-download-url-keyword')) { try { if (response.ok()) { // 读取响应体 const csvText = await response.text(); console.log('CSV内容:', csvText); // 此处可添加CSV解析逻辑(如使用csv-parser库) } } catch (err) { console.error('读取响应体失败:', err); } } }); // 模拟页面操作:导航到目标页,点击提交按钮 await page.goto('your-target-page-url'); await page.click('#submit-button'); // 替换为实际提交按钮的选择器 // 等待响应返回 await page.waitForTimeout(3000); await browser.close(); })();
解决方案2:用Fetch发起请求绕过浏览器下载
如果拦截方式无效,可在页面上下文内用fetch直接请求下载接口,避免触发浏览器自动下载:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('your-target-page-url'); // 在页面上下文执行Fetch请求 const csvText = await page.evaluate(async () => { const response = await fetch('your-download-api-url', { method: 'POST', // 根据实际请求方法调整 credentials: 'include', // 携带Cookie维持登录状态 headers: { 'Content-Type': 'application/x-www-form-urlencoded', // 匹配原请求头 }, body: 'your-form-data-here' // POST请求需传入对应表单数据 }); if (!response.ok) { throw new Error(`请求失败: ${response.status}`); } return response.text(); }); console.log('CSV内容:', csvText); // 处理CSV数据 await browser.close(); })();
注意事项
- 确保目标请求的URL匹配准确,避免误拦截其他响应
- 若页面需要登录,需保证Puppeteer上下文携带正确的Cookie
- 使用Fetch方法时,需完整复现原请求的方法、请求头和请求体,否则可能请求失败
内容的提问来源于stack exchange,提问作者Brent
相关产品推荐
相关产品推荐

