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

如何使用Python开发具备文本加解密功能的WireMock扩展

WireMock Python加解密扩展实现方案

方案1:侧挂Python HTTP服务(零侵入WireMock,实现成本最低)

这个方案不需要修改WireMock核心,直接利用WireMock的现有扩展能力调用独立的Python加解密服务即可,完全适配你的需求:

  • 首先用FastAPI/Flask把你已有的Python加解密逻辑封装成两个HTTP接口:
    • POST /decrypt:入参为客户端上传的加密数据,出参为解密后的明文JSON
    • POST /encrypt:入参为待返回的明文JSON,出参为加密后的响应数据
      示例Flask服务核心代码:
    from flask import Flask, request, jsonify
    # 导入你已有的加解密函数
    from your_encrypt_module import decrypt_data, encrypt_data
    
    app = Flask(__name__)
    
    @app.post("/decrypt")
    def decrypt():
        encrypted = request.get_data(as_text=True)
        plain_json = decrypt_data(encrypted)
        return jsonify(plain_json)
    
    @app.post("/encrypt")
    def encrypt():
        plain_json = request.get_json()
        encrypted = encrypt_data(plain_json)
        return encrypted
    
    if __name__ == "__main__":
        app.run(port=5000)
    
  • 然后在WireMock侧安装response-template和webhook扩展,配置Stub规则实现完整流程:
    1. 收到客户端加密请求后,先转发请求体到Python的/decrypt接口拿到明文
    2. 基于明文内容匹配你预设的校验规则,命中后生成对应的明文响应
    3. 将明文响应转发到Python的/encrypt接口拿到密文,最终返回给客户端
      示例Stub配置片段:
    {
      "request": {
        "method": "POST",
        "urlPath": "/your/api/path"
      },
      "response": {
        "transformers": ["response-template"],
        "body": "{{#webhook 'http://localhost:5000/encrypt' method='POST' body=plain_response}}{{/webhook}}"
      },
      "serveEventListener": {
        "listener": "webhook",
        "parameters": {
          "url": "http://localhost:5000/decrypt",
          "method": "POST",
          "body": "{{request.body}}",
          "storeVariable": "plain_response"
        }
      }
    }
    
    如果你不需要WireMock侧做响应加密,直接把提前加密好的密文配置到Stub的body字段即可,不需要调用/encrypt接口。

方案2:基于WireMock Python SDK原生开发扩展(无需额外服务)

如果你不想单独启动Python HTTP服务,可以直接用官方维护的WireMock Python SDK编写自定义扩展,加解密逻辑直接嵌入到WireMock的请求/响应处理流程中:

  • 第一步安装依赖:pip install wiremock
  • 第二步编写自定义转换器,嵌入你已有的加解密代码:
    from wiremock import WireMockClient
    from wiremock.extensions import ResponseTransformer, RequestMatcher
    # 导入你已有的加解密函数
    from your_encrypt_module import decrypt_data, encrypt_data
    
    class DecryptRequestMatcher(RequestMatcher):
        def match(self, request):
            # 解密请求体
            plain_body = decrypt_data(request.body)
            # 这里添加你要校验的条件,返回是否命中规则
            return plain_body.get("your_check_field") == "expected_value"
    
    class EncryptResponseTransformer(ResponseTransformer):
        def transform(self, response, request):
            # 加密响应体
            encrypted_body = encrypt_data(response.json_body)
            response.body = encrypted_body
            return response
    
    # 启动WireMock并注册扩展
    wm = WireMockClient(port=8080, extensions=[DecryptRequestMatcher, EncryptResponseTransformer])
    
  • 后续直接在Python代码里配置Stub规则即可,整个流程全在Python层控制,不需要写Java代码。

注意事项

  • 方案1适合加解密逻辑需要频繁迭代的场景,修改加解密逻辑不需要重启WireMock
  • 方案2适合轻量化部署场景,只需要启动一个Python进程即可同时跑WireMock和加解密逻辑
  • 如果不需要响应加密能力,两种方案都可以直接省略加密相关的配置,直接传入预加密的响应数据即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:24:02