【问题标题】:Cannot add header value to HTTP request via hooks无法通过钩子将标头值添加到 HTTP 请求
【发布时间】:2020-07-21 15:11:04
【问题描述】:

使用 Testcafe,我正在尝试向我的所有请求添加一个 HTTP 标头键/值对,但是当我在实时模式下检查浏览器中的网络请求时,它没有出现在请求标头中。

我想知道这是否可能是 TypeScript 的问题?我不得不修改文档中的示例代码以允许方法参数的类型为 any 以使其编译,这令人惊讶,因为我在其他地方没有看到该要求,TC 只是“处理”它。

那么两个问题:

  • 我希望看到标头 wafAccessToken 对出现在对 http://www.google.com 的请求中,但它不是 - 知道可能是什么问题吗?
  • 有没有办法让我的RequestHook 不在构造函数中指定确切的 URL?我只想让它匹配和修改每个请求,无论我要去哪里。

代码如下:

import { RequestHook } from 'testcafe';

export class WebSwitchHook extends RequestHook
{
    constructor(requestFilterRules: any, responseEventConfigureOpts: any)
    {
      super(requestFilterRules, responseEventConfigureOpts);
      // ...
    }

    async onRequest (e: any)
    {
      e.requestOptions.headers['wafAccessToken'] = "REDACTED";
      console.log(e.requestOptions);
    }

    async onResponse (e: any) {
      console.log(e.body);
    }
}

const webSwitchHook = new WebSwitchHook("http://www.google.com", {
  includeHeaders: true,
  includeBody: true
});

fixture.only('Test')
.page("http://www.google.com")
.requestHooks(webSwitchHook);

test('Test', async t => {
  
});

【问题讨论】:

    标签: testing automation automated-tests e2e-testing testcafe


    【解决方案1】:

    您共享的代码可以正常工作。您可以看到您在服务器上添加的标头。您还可以将RequestLogger 附加到夹具并在那里查看更新的标题。

    至于您的第二个问题,您可以使用this example 中的代码将RequestHook 用于所有请求:

    class JwtBearerAuthorization extends RequestHook {
        constructor () {
            super();
        }
    
        //...
    }
    

    或者,将正则表达式传递给 RequestHook 构造函数,使其仅用于匹配 URL。

    【讨论】:

    • 感谢您的确认 - 不幸的是,当我运行代码时,标题仍然没有为我插入。不知道为什么会这样......
    • @njp,你试过RequestLogger 来检查标题吗?这些标头是在从浏览器发出请求后附加的,因此它们不会出现在浏览器 DevTools 的 Network 选项卡中。
    猜你喜欢
    • 1970-01-01
    • 2017-02-15
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    相关资源
    最近更新 更多