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

使用Chrome DevTools Protocol,如何获取Network.getResponseBody的RequestId?

解决Chrome DevTools Protocol获取ResponseBody时的RequestId问题

要拿到RequestId,你得先监听Chrome DevTools的网络事件——这些事件会在请求发起或响应返回时携带requestId。直接调用Network.getResponseBody不传参数必然返回空,因为这个方法必须指定要获取哪个请求的响应体。

下面是修改后的Ruby代码,一步步实现需求:

chrome = ChromeRemote.client

# 启用网络和页面事件
chrome.send_cmd("Network.enable")
chrome.send_cmd("Page.enable")

# 存储目标请求的requestId,可根据需求过滤特定请求
target_request_id = nil

# 监听响应接收事件,提取requestId(也可使用Network.requestWillBeSent事件)
chrome.on "Network.responseReceived" do |event|
  response = event["params"]["response"]
  request_id = event["params"]["requestId"]
  url = response["url"]
  
  puts "收到响应: #{url} | RequestId: #{request_id}"
  
  # 按URL关键词过滤目标请求,替换成你需要跟踪的URL特征
  target_request_id = request_id if url.include?("目标URL关键词")
end

# 导航到目标页面,触发网络请求
chrome.send_cmd("Page.navigate", url: "https://你的目标页面地址")

# 等待页面加载完成,确保请求已触发
sleep 3

# 拿到requestId后,调用getResponseBody获取响应体
if target_request_id
  response_body = chrome.send_cmd("Network.getResponseBody", requestId: target_request_id)
  puts "响应体内容: #{response_body}"
else
  puts "未找到目标请求的RequestId"
end

关键说明:

  • Network.responseReceived事件会在每个请求的响应到达时触发,params.requestId就是你需要的请求标识。
  • 通过response.url过滤目标请求,避免无差别处理所有请求。
  • 必须等待页面加载或请求完成后再调用getResponseBody,否则可能拿不到有效数据。
  • 如果目标请求是HTTPS协议,确保Chrome实例配置正常,无需额外证书验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:00:54