
rewerse-engineering v1.4.0
Обратная разработка API Rewe на Go
rewerse engineering
Неофициальный клиент API REWE на Go и Python. Он реализует публично доступные (неаутентифицированные) конечные точки, которые приложение REWE использует для запроса текущих скидок (Angebote), товаров, магазинов и отзывов.
Поддерживаемая версия APK: 5.16.2 (по состоянию на 06.08.26)
[!CAUTION] Сертификаты, необходимые для взаимодействия с rewe api, не включены в этот репозиторий. Вам нужно извлечь их из 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 не документирован и может измениться или перестать работать в любое время без предварительного уведомления.
Использование этого программного обеспечения осуществляется на ваш собственный риск. Пользователи несут ответственность за обеспечение соответствия их использования применимым условиям обслуживания.
содержимое
- Базовая реализация rewe api на go доступна в каталоге pkg; см. pkg/readme для документации по api go-библиотеки, включая примеры использования.
- Обёртка ffi для python доступна как
rewerseна PyPI – см. python/readme для подробностей и исходного кода. - Исходный код cli для go-библиотеки находится в cmd.
- Релизы находятся в releases.
[!NOTE] Обратите внимание, что, поскольку это неподписанный go-бинарник, который выполняет некоторое шифрование/дешифрование сертификатов и отправляет веб-запросы к rewe api, он, скорее всего, будет помечен вашим антивирусом. Зависимостей нет, поэтому вы можете легко скомпилировать его самостоятельно – что всегда рекомендуется с точки зрения безопасности.
удалённые конечные точки
В приложении больше нет конечной точки автодополнения, и оно просто использует обычный поиск товаров, поэтому предложения товаров исчезли.
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
discounts Get market discounts
categories Get product categories
recipes Search recipes, get details and popular terms
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 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
Run './rewerse.exe <command>' for subcommand help.
тесты
Тесты находятся в pkg/*_test.go. Есть два вида:
- Модульные тесты десериализуют JSON-полезные нагрузки в наши структуры. Полезные нагрузки получены из реальных ответов API. Они выполняются без сертификатов и выявляют несоответствия типов между нашими структурами и фактическими формами API.
go test ./pkg/ -run Unmarshal - Интеграционные тесты обращаются к живому API и требуют сертификаты. Они автоматически пропускаются, если сертификаты не найдены.
go test ./pkg/
Если вы вносите изменения в структуру, пожалуйста, рассмотрите возможность добавления или обновления теста десериализации. Используйте реальный ответ API, если можете его захватить, в противном случае подойдёт синтетическая JSON-полезная нагрузка, отражающая фактическое поведение API.
внесение вклада
Не стесняйтесь открывать вопросы на github для предложений, вопросов, ошибок. Приветствуются PR. Электронная почта: rewe at byte dot rest.