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

如何使用Puppeteer流式获取网络请求数据而非完整响应

解决方案

要实现流式传输目标API的响应数据,核心是不要用response.text()(它会等待完整响应加载完成),而是直接获取响应的可读流,再将其管道(pipe)到你的服务器响应对象res上。以下是修改后的代码:

page.on('response', async (response) => {
    const url = response.url();
    if (url.includes("/api/answer")) {
        // 获取响应的可读流
        const responseStream = await response.body();
        
        // 设置流式响应的必要头信息(根据目标API的Content-Type调整)
        res.setHeader('Content-Type', 'text/plain; charset=utf-8');
        res.setHeader('Transfer-Encoding', 'chunked');
        
        // 将Puppeteer获取的流管道到服务器响应
        responseStream.pipe(res);
        
        // 处理流的错误事件,避免进程崩溃
        responseStream.on('error', (err) => {
            console.error('流式传输出错:', err);
            if (!res.headersSent) {
                res.status(500).send('流式传输失败');
            }
        });
    }
});

关键说明:

  • response.body():返回Node.js的ReadableStream,可直接用于流式处理,无需等待完整响应加载。
  • pipe(res):将上游的响应流直接转发到客户端,实现实时分块传输数据。
  • 响应头设置:确保Content-Type匹配目标API返回的类型(如果是JSON流就设为application/json),Transfer-Encoding: chunked告诉客户端这是分块响应。
  • 错误处理:监听流的error事件,防止因网络问题或其他异常导致进程崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:32:14