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

如何使用WireMock重定向并保留请求参数与请求头?

WireMock实现带查询参数与请求头传递的302重定向

要实现你需要的重定向逻辑,核心是利用WireMock的**请求模板(Request Templating)**功能,动态生成Location头并复制原请求的参数和头信息。以下是具体实现方案:

前置准备

确保启用WireMock的请求模板功能:

  • 若用Java集成WireMock,初始化服务时需添加模板扩展:
WireMockServer wireMockServer = new WireMockServer(wireMockConfig()
        .extensions(new ResponseTemplateTransformer(true))); // 开启请求模板
wireMockServer.start();
  • 若用独立版WireMock,启动时添加参数:--enable-request-templating

完整Stub实现代码

stubMappingProxy = wireMock.register(WireMock.get(WireMock.urlPathMatching("/my-login-service/callback.*"))
        .willReturn(WireMock.aResponse()
                .withStatus(302)
                // 启用当前响应的模板解析
                .withTransformerParameter("template", true)
                // 动态生成Location头:拼接目标URL与原请求的查询参数
                .withHeader("Location", "{{#if request.queryString.isPresent}}" +
                        "https://myservice.local/myservice/callback?{{request.queryString}}" +
                        "{{else}}" +
                        "https://myservice.local/myservice/callback" +
                        "{{/if}}")
                // 复制原请求的所有请求头到响应中
                .withHeaders(WireMock.headers()
                        .eachHeader((headerName, headerValues) -> 
                                WireMock.header(headerName, "{{request.headers." + headerName + "}}")))));

代码关键说明

  1. 路径匹配:urlPathMatching("/my-login-service/callback.*")会匹配所有以/my-login-service/callback开头的请求路径,包含带查询参数的情况。
  2. 动态Location头:
    • 使用Handlebars模板语法判断原请求是否存在查询参数
    • 若存在,将查询参数完整拼接到目标URL后;若不存在,直接返回基础目标URL,避免出现多余的?符号
  3. 请求头复制:通过模板表达式{{request.headers.头名称}},将原请求的每个头信息复制到响应头中,满足传递所有请求头的需求

测试验证

当发起请求/my-login-service/callback?param1=val1&param2=val2时,WireMock会返回:

  • 状态码302
  • Location头:https://myservice.local/myservice/callback?param1=val1&param2=val2
  • 原请求的所有请求头(如Cookie、User-Agent等)都会被包含在响应头中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:57:10