
rewerse-engineering v1.4.0
Rewe API 逆向工程(Go 语言)
rewerse engineering
一个非官方的 REWE API 客户端,使用 Go 和 Python 编写。它实现了 REWE 应用用于查询当前折扣(Angebote)、商品、市场和召回信息的公开可访问(无需认证)端点。
当前支持的 APK 版本:5.16.2(截至 06.08.26)
[!CAUTION] 与 rewe api 通信所需的证书不包含在此仓库中。你需要从 APK 中提取它们。相关文档及适用于 Windows 的提取脚本可在 docs 目录中找到。
另请参阅 rewerse-ui。
快速开始
从 rewe apk 中提取证书;参见 docs 中的说明
使用该库:
或安装 CLI:
- 下载 一个发布版本
- 或通过 Go 安装:
go install github.com/ByteSizedMarius/rewerse-engineering/cmd@latest - 或克隆并构建:
go build -o rewerse ./cmd
验证:rewerse --help
示例: 获取某个市场的当前折扣:
$ rewerse discounts -market 840174
Top-Angebote in deinem Markt
Haribo Goldbären oder Color-Rado, 0.77€
Coca-Cola, Fanta oder Sprite, 0.99€
Obst & Gemüse
Heidelbeeren, 1.49€
Rispentomaten, 0.99€
...
简介
在 2024 年 3 月,Rewe 开始
使用 Cloudflare MTLS 来保护其 api 端点,这
破坏了现有的解决方案,例如获取特定 Rewe 市场折扣的功能。
Github 用户 @torbenpfohl 足够执着坚持,最终弄清楚了这一点,找到了证书及其密码。本仓库基于
他的工作,旨在记录所需流程并实现部分端点。
免责声明
本项目与 REWE-ZENTRALFINANZ eG 无关联、未经其认可,也未受其赞助。“REWE” 是其各自所有者的注册商标。
这是一个基于 REWE 移动应用公开可观察网络流量的非官方客户端。它仅供教育和研究目的使用。底层 API 未记录在案,可能随时更改或失效,恕不另行通知。
使用本软件风险自负。用户有责任确保其使用符合适用的服务条款。
内容
- 在 pkg 目录中提供了 rewe api 的基础 Go 实现;有关 go 库的 api 文档(包括使用示例),请参阅 pkg/readme。
- 一个 ffi Python 包装器以
rewerse的名称发布在 PyPI 上 – 有关详细信息及源代码,请参阅 python/readme。 - go 库的 cli 源代码位于 cmd 中。
- 发布版本位于 releases 中。
[!NOTE] 请注意,由于这是一个未签名的 go 二进制文件,它会执行一些证书的加密/解密操作并向 rewe api 发送网络请求,因此很可能会被你的杀毒软件标记。它没有任何依赖项,因此你可以轻松自行编译——从安全角度来看,这始终是推荐的做法。
已移除的端点
该应用不再有自动补全端点,仅使用常规商品搜索,因此商品建议功能已移除。
cli
用法:./rewerse.exe [标志] <命令> [子命令] [标志]
标志:
-cert <路径> 证书文件(默认:certificate.pem)
-key <路径> 密钥文件(默认:private.key)
-json 以 JSON 格式输出
命令:
markets 搜索并获取市场详情
products 搜索、浏览并获取商品信息
discounts 获取市场折扣
categories 获取商品类别
recipes 搜索食谱、获取详情及热门搜索词
recalls 获取商品召回信息
services 按邮编获取服务组合
示例:
./rewerse.exe markets search -query Köln
./rewerse.exe products search -market 831002 -query Milch
./rewerse.exe products category -market 831002 -slug obst-gemuese
./rewerse.exe discounts -market 840174
./rewerse.exe categories -market 831002
./rewerse.exe services -zip 50667
./rewerse.exe recipes search -term Lachs -difficulties 1
./rewerse.exe recipes details -id blt4aaa7361ba69f8c8
运行 './rewerse.exe <命令>' 获取子命令帮助。
测试
测试位于 pkg/*_test.go 中。共有两种类型:
- 单元测试将 JSON 负载反序列化到我们的结构体中。这些负载源自真实的 API 响应。它们无需证书即可运行,并能捕获我们的结构体与实际 API 形状之间的类型不匹配问题。
go test ./pkg/ -run Unmarshal - 集成测试会访问实时 API,需要证书。如果未找到证书,它们会自动跳过。
go test ./pkg/
如果你要贡献结构体更改,请考虑添加或更新反序列化测试。如果可能,请使用真实的 API 响应;否则,反映实际 API 行为的合成 JSON 负载也是可以的。
贡献
欢迎针对建议、问题、错误开启 github issue。欢迎提交 PR。邮箱:rewe at byte dot rest。