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

独立运行testcafe-hammerhead Proxy时,如何配置请求钩子?

独立运行testcafe-hammerhead时的钩子使用方案

明确结论:独立运行hammerhead代理完全支持钩子功能,不需要修改request-pipeline源码,官方提供了和TestCafe主框架逻辑一致的非侵入式钩子注册方式。

具体实现步骤

1. 初始化Hammerhead代理实例

直接使用hammerhead封装的Proxy类创建实例(比手动初始化RequestPipeline更简便,自带完整的代理启动逻辑):

const { Proxy } = require('testcafe-hammerhead');

// 配置代理端口与主机
const proxy = new Proxy({
    port: 1337,
    hostname: 'localhost'
});

2. 注册请求/响应钩子

通过代理实例的hooks对象,直接注册各类钩子,常用的钩子类型包括onRequest、onResponse、onBeforeRequest:

示例1:修改请求头

proxy.hooks.onRequest.add((req, res, options) => {
    // 给所有通过代理的请求添加自定义头
    req.headers['X-Custom-Proxy-Tag'] = 'standalone-hammerhead';
});

示例2:拦截并修改响应内容

proxy.hooks.onResponse.add((req, res, responseBuffer, responseHeaders) => {
    // 仅针对HTML响应注入自定义脚本
    if (responseHeaders['content-type']?.includes('text/html')) {
        const modifiedContent = responseBuffer.toString().replace('</body>', '<script>console.log("Proxy injected code")</script></body>');
        return Buffer.from(modifiedContent);
    }
});

示例3:拦截请求并重定向

proxy.hooks.onBeforeRequest.add((req, res, options) => {
    if (req.url.includes('/deprecated-api')) {
        res.writeHead(302, { Location: '/v2/api' });
        res.end();
        return null; // 返回null终止原请求的后续处理
    }
});

3. 启动代理

完成钩子注册后,启动代理即可让所有配置生效:

proxy.start().then(() => {
    console.log('Hammerhead proxy running at http://localhost:1337');
});

关键注意事项

  • 钩子按注册顺序执行,有依赖关系的钩子要注意顺序
  • 部分钩子的返回值会影响流程(比如onBeforeRequest返回null会直接终止原请求)
  • 钩子内尽量避免异步操作,若需异步逻辑可使用支持Promise的钩子类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:42:47