
rewerse-engineering v1.3.0
Обратная разработка API Rewe на Go
rewerse engineering
Этот репозиторий содержит реализацию всех общедоступных (неаутентифицированных) конечных точек API, используемых приложением Rewe для получения текущих скидок, товаров, рецептов и отзывов.
Текущая поддерживаемая версия APK: 5.15.2 (по состоянию на 12.07.26)
[!CAUTION] Сертификаты, необходимые для взаимодействия с API Rewe, не включены в этот репозиторий. Их необходимо извлечь из APK. Документация и скрипт извлечения для Windows находятся в каталоге docs.
См. также rewerse-ui.
быстрый старт
Извлеките сертификаты из APK Rewe; см. инструкции в docs
Используйте библиотеку:
- Go:
go get github.com/ByteSizedMarius/rewerse-engineering– документация - Python:
pip install rewerse– документация
Или установите 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 Rewe начал использовать Cloudflare MTLS для защиты своих API-конечных точек, что сломало существующие решения, позволявшие, например, получать скидки для конкретного магазина Rewe.
Пользователь GitHub @torbenpfohl был одержим настойчив, чтобы разобраться в этом, найти сертификат и его пароль. Этот репозиторий основан на его работе и призван документировать необходимые процедуры и реализовать некоторые конечные точки.
отказ от ответственности
Этот проект не связан с REWE-ZENTRALFINANZ eG, не одобрен и не спонсируется ею. «REWE» является зарегистрированной торговой маркой своего владельца.
Это неофициальный клиент, основанный на общедоступном сетевом трафике мобильного приложения REWE. Он предоставляется в образовательных и исследовательских целях. Используемый API не документирован и может измениться или перестать работать в любое время без предупреждения.
Использование этого программного обеспечения осуществляется на ваш собственный риск. Пользователи несут ответственность за соблюдение применимых условий обслуживания.
содержимое
- Базовая реализация API Rewe на Go доступна в каталоге pkg; см. pkg/readme для документации по API Go-библиотеки, включая примеры использования.
- Обёртка Python через FFI доступна как
rewerseна PyPI – подробности и исходный код см. в python/readme. - Исходный код CLI для Go-библиотеки находится в cmd.
- Релизы доступны в releases.
[!NOTE] Обратите внимание, что поскольку это неподписанный Go-бинарник, который выполняет шифрование/дешифрование сертификатов и отправляет веб-запросы к API Rewe, он, скорее всего, будет помечен вашим антивирусом. Зависимостей нет, поэтому вы легко можете скомпилировать его самостоятельно – что всегда рекомендуется с точки зрения безопасности.
CLI
Usage: ./rewerse.exe [flags] <command> [subcommand] [flags]
Flags:
-cert <path> Certificate file (default: certificate.pem)
-key <path> Key file (default: private.key)
-json Output as JSON
Commands:
markets Search and get market details
products Search, browse, and get product info
recipes Search and browse recipes
discounts Get market discounts
categories Get product categories
recalls Get product recalls
services Get service portfolio by zip
Examples:
./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 recipes search -term Pasta
./rewerse.exe discounts -market 840174
./rewerse.exe categories -market 831002
./rewerse.exe services -zip 50667
Run './rewerse.exe <command>' for subcommand help.
тесты
Тесты находятся в pkg/*_test.go. Есть два типа:
- Модульные тесты разбирают JSON-нагрузки в наши структуры. Нагрузки получены из реальных ответов API. Они выполняются без сертификатов и выявляют несоответствия типов между нашими структурами и фактическими формами API.
go test ./pkg/ -run Unmarshal - Интеграционные тесты обращаются к живому API и требуют сертификаты. Они автоматически пропускаются, если сертификаты не найдены.
go test ./pkg/
Если вы вносите изменения в структуру, пожалуйста, рассмотрите возможность добавления или обновления теста разбора (unmarshal test). Используйте реальный ответ API, если можете его получить, в противном случае подойдёт синтетическая JSON-нагрузка, отражающая реальное поведение API.
участие
Смело открывайте вопросы на GitHub для предложений, вопросов, сообщений об ошибках. PR приветствуются. Email: rewe at byte dot rest.