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

Java Playwright如何获取重定向响应的响应体?

Playwright Java 获取重定向响应体的解决方案

问题描述

我正在使用Playwright Java库,执行以下代码时,遇到重定向响应会抛出异常 Response body is unavailable for redirect responses:

final BrowserContext context = browser.newContext();
final Page page = context.newPage();
page.onResponse(response -> {
    response.body();
});

想请教有没有办法无论是否重定向都能获取响应体?

解决方案

要获取重定向响应的body,核心是让Playwright不自动跟进重定向,这样就能手动捕获并读取每个重定向响应的内容,之后可按需自行处理跳转逻辑。具体实现如下:

  1. 创建BrowserContext时禁用自动重定向
    通过BrowserContextOptions关闭自动重定向功能:
BrowserContextOptions contextOptions = new BrowserContextOptions();
contextOptions.setFollowRedirects(false);
final BrowserContext context = browser.newContext(contextOptions);
final Page page = context.newPage();
  1. 监听所有响应并读取body
    此时所有响应(包括重定向响应)都可以正常调用response.body()获取内容:
page.onResponse(response -> {
    try {
        byte[] body = response.body();
        // 按需处理响应体,比如转换为字符串
        String bodyStr = new String(body, StandardCharsets.UTF_8);
        System.out.println("响应状态码:" + response.status() + ",响应体内容:" + bodyStr);
    } catch (Exception e) {
        e.printStackTrace();
    }
});
  1. 手动处理重定向(可选)
    如果需要继续跟进重定向,可以检查响应状态码(3xx范围)和Location响应头,手动发起跳转:
page.onResponse(response -> {
    try {
        byte[] body = response.body();
        // 先处理响应体内容...
        
        // 检测并重定向
        if (response.status() >= 300 && response.status() < 400) {
            String redirectUrl = response.headerValue("Location");
            if (redirectUrl != null) {
                page.navigate(redirectUrl);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
});

注意:禁用自动重定向后,所有重定向都需要手动处理,否则页面不会自动跳转。如果仅需要捕获重定向响应的body而不需要后续跳转,只执行前两步即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:10:37