当 Karate Netty 服务器用作转发代理服务器时更改请求标头

问题描述 投票:0回答:2

我有一个用例,我运行 Karate Netty 服务器作为转发代理服务器,将请求转发到目标 Tomcat 服务器。我注意到 hostname 标头在转发导致请求不响应的请求时被设置为 Karate Netty 服务器。在将请求转发到目标服务器之前,我们能否以某种方式更新请求标头。

更广泛的用例:在实时 QA 环境中进行测试,我们有一个提升和转移项目,将我们的休息服务从一个基础设施平台转移到另一个基础设施平台。这是示例特征文件:

Feature:

  Scenario: pathMatches('/myresources/getResource') && methodIs('GET')
    # Sending request to PLATFORM ABC URL
    * karate.proceed('http://localhost:8081')
    * def response1 = response
    # Sending request to PLATFORM XYZ URL
    * karate.proceed('http://localhost:8082')
    * def response2 = response
    * match response1 == response2
karate request-headers proxy-server mockserver-netty
2个回答
1
投票

首先,对于您的评论 - 获取包含查询字符串的路径应该通过

requestUri
工作: https://github.com/karatelabs/karate/tree/master/karate-netty#requesturi

但我们意识到有一个错误。它将在下一个版本中修复,但如果您可以从develop

分支
验证,那将有助于我们加快发布速度。

如果您看到上面链接的问题 #2295 中的提交,您会看到我们引入了

requestPath
以更好地控制这些情况。

谈到标头,我认为在您调用

karate.proceed()
之前模拟中的这一行将起到作用:

* requestHeaders['host'] = 'myhost:123'

请确认。如果您仍然发现需要调整的地方,我请求您的帮助 - 您可以查看流程并运行 this test 进行调查。我记得有人遇到了内容长度的问题,所以我们决定只在模拟中删除该标题,请参阅这一行


0
投票

感谢@Peter Thomas 的所有帮助!我能够使用以下代码片段解决上述问题:

      * configure cookies = null
      * requestHeaders['cookie'] = authToken
      * requestHeaders['host'] = firstHost
      * karate.proceed(url1)
      * def response1 = response
      * configure cookies = null
      * requestHeaders['cookie'] = authToken
      * requestHeaders['host'] = secondHost
      * karate.proceed(url2)
      * def response2 = response
      * match response1 = response2
© www.soinside.com 2019 - 2024. All rights reserved.