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

Chrome DevTools Protocol:如何配置RequestPattern排除服务端请求?

问题

当前需求是处理除服务端发送的请求外的所有请求,目前的做法是先捕获所有请求,再在处理器里过滤服务端请求,代码示例如下:

await client.Fetch.enable({
    patterns: [
       { requestStage: 'Request' }, 
       { requestStage: 'Response' }
    ], // 处理所有请求和响应
});

client.Fetch.on('requestPaused', async (event: RequestPausedEvent) => {
    if (isServiceRoute(event.request.url))
        await continueRequestOrResponse(client, event);

    ...
    // 处理必要的事件
});

想询问:能不能在client.Fetch.enable()阶段直接完成配置?比如通过设置patterns过滤器,允许所有请求(*)同时拒绝来自https://service-domain-1.company.com和https://service-domain-2.company.com的服务路由?

回答

可以直接在client.Fetch.enable()的patterns里配置过滤规则,不需要等到请求触发后再处理。Chrome DevTools Protocol的Fetch.enable方法支持用urlPattern结合否定模式实现这个需求。

具体配置思路:

  • 先添加否定规则,排除指定服务域名的请求/响应
  • 再添加匹配所有请求/响应的规则(因为规则按顺序匹配,先匹配到的生效,所以否定规则要放在前面)

代码示例:

await client.Fetch.enable({
    patterns: [
        // 排除两个服务域名的所有请求和响应
        { urlPattern: "https://service-domain-1.company.com/*", requestStage: "Request", disabled: true },
        { urlPattern: "https://service-domain-1.company.com/*", requestStage: "Response", disabled: true },
        { urlPattern: "https://service-domain-2.company.com/*", requestStage: "Request", disabled: true },
        { urlPattern: "https://service-domain-2.company.com/*", requestStage: "Response", disabled: true },
        // 匹配所有剩余的请求和响应
        { requestStage: "Request" },
        { requestStage: "Response" }
    ]
});

// 此时requestPaused事件只会触发非服务域名的请求,无需额外过滤
client.Fetch.on('requestPaused', async (event: RequestPausedEvent) => {
    ...
    // 直接处理必要的事件
});

关键注意点:

  • disabled: true表示禁用该规则的匹配,即排除符合对应urlPattern的请求
  • 规则顺序不能乱,否定规则必须放在匹配所有请求的规则前面,否则所有请求会先被全匹配规则捕获,否定规则失效
  • urlPattern支持通配符,*可匹配域名下任意子路径,确保覆盖该服务域名的所有请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:45:31