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不自动跟进重定向,这样就能手动捕获并读取每个重定向响应的内容,之后可按需自行处理跳转逻辑。具体实现如下:
- 创建BrowserContext时禁用自动重定向
通过BrowserContextOptions关闭自动重定向功能:
BrowserContextOptions contextOptions = new BrowserContextOptions(); contextOptions.setFollowRedirects(false); final BrowserContext context = browser.newContext(contextOptions); final Page page = context.newPage();
- 监听所有响应并读取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(); } });
- 手动处理重定向(可选)
如果需要继续跟进重定向,可以检查响应状态码(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
相关产品推荐
相关产品推荐

