如何使用Python开发具备文本加解密功能的WireMock扩展
WireMock Python加解密扩展实现方案
方案1:侧挂Python HTTP服务(零侵入WireMock,实现成本最低)
这个方案不需要修改WireMock核心,直接利用WireMock的现有扩展能力调用独立的Python加解密服务即可,完全适配你的需求:
- 首先用FastAPI/Flask把你已有的Python加解密逻辑封装成两个HTTP接口:
POST /decrypt:入参为客户端上传的加密数据,出参为解密后的明文JSONPOST /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规则实现完整流程:- 收到客户端加密请求后,先转发请求体到Python的
/decrypt接口拿到明文 - 基于明文内容匹配你预设的校验规则,命中后生成对应的明文响应
- 将明文响应转发到Python的
/encrypt接口拿到密文,最终返回给客户端
示例Stub配置片段:
如果你不需要WireMock侧做响应加密,直接把提前加密好的密文配置到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" } } }body字段即可,不需要调用/encrypt接口。 - 收到客户端加密请求后,先转发请求体到Python的
方案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
相关产品推荐
相关产品推荐

