Torna agli aggiornamenti
New releaseSep 6, 2026

rewerse-engineering v1.4.0

Reverse engineering dell'API Rewe in Go

Condividi

rewerse engineering

Project Logo

Un client API REWE non ufficiale in Go e Python. Implementa gli endpoint pubblicamente accessibili (senza autenticazione) che l'app REWE utilizza per interrogare sconti correnti (Angebote), prodotti, mercati e richiami.

Versione APK attualmente supportata: 5.16.2 (al 06.08.26)

[!CAUTION] I certificati necessari per comunicare con l'API REWE non sono inclusi in questo repository. Devi estrarli dall'APK. La documentazione e uno script di estrazione per Windows sono disponibili nella directory docs.

Vedi anche rewerse-ui.

avvio rapido

Estrai i certificati dall'APK REWE; consulta docs per le istruzioni

Usa la libreria:

  • Go: go get github.com/ByteSizedMarius/rewerse-engineeringdocs
  • Python: pip install rewersedocs

Oppure installa la CLI:

  • Scarica una release
  • Oppure installa tramite Go: go install github.com/ByteSizedMarius/rewerse-engineering/cmd@latest
  • Oppure clona e compila: go build -o rewerse ./cmd

Verifica: rewerse --help

Esempio: Recupera gli sconti correnti per un mercato:

$ 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€
...

introduzione

Nel marzo 2024, Rewe ha iniziato a utilizzare Cloudflare MTLS per proteggere i propri endpoint API, il che ha interrotto le soluzioni esistenti che consentivano, ad esempio, di recuperare gli sconti per uno specifico mercato Rewe. L'utente GitHub @torbenpfohl è stato ossessionato abbastanza persistente da capire come funzionasse, trovare il certificato e la sua password. Questo repository si basa sul suo lavoro e mira a documentare le procedure necessarie e implementare alcuni degli endpoint.

disclaimer

Questo progetto non è affiliato, approvato o sponsorizzato da REWE-ZENTRALFINANZ eG. "REWE" è un marchio registrato del rispettivo proprietario.

Questo è un client non ufficiale basato sul traffico di rete pubblicamente osservabile dell'app mobile REWE. È fornito a scopo educativo e di ricerca. L'API sottostante non è documentata e può cambiare o interrompersi in qualsiasi momento senza preavviso.

L'uso di questo software è a proprio rischio. Gli utenti sono responsabili di garantire che il loro utilizzo sia conforme ai termini di servizio applicabili.

contenuti

  • Un'implementazione Go di base dell'API REWE è disponibile nella directory pkg; consulta pkg/readme per la documentazione API della libreria Go, inclusi esempi di utilizzo.
  • Un wrapper Python FFI è disponibile come rewerse su PyPI – consulta python/readme per dettagli e codice sorgente.
  • Il codice sorgente della CLI per la libreria Go si trova in cmd.
  • Le release sono disponibili in releases.

[!NOTE] Tieni presente che, trattandosi di un binario Go non firmato che esegue operazioni di crittografia/decrittografia dei certificati e invia richieste web all'API REWE, è probabile che venga segnalato dal tuo antivirus. Non ci sono dipendenze, quindi puoi facilmente compilarlo da solo – cosa sempre consigliata dal punto di vista della sicurezza.

endpoint rimossi

L'app non ha più un endpoint di completamento automatico e utilizza semplicemente la normale ricerca prodotti, quindi i suggerimenti di prodotto sono spariti.

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.

test

I test si trovano in pkg/*_test.go. Esistono due tipi:

  • I test unitari deserializzano i payload JSON nelle nostre strutture. I payload derivano da risposte API reali. Questi test vengono eseguiti senza certificati e rilevano discrepanze di tipo tra le nostre strutture e le forme API effettive. go test ./pkg/ -run Unmarshal
  • I test di integrazione accedono all'API live e richiedono i certificati. Vengono saltati automaticamente se non vengono trovati certificati. go test ./pkg/

Se contribuisci con una modifica alle strutture, considera di aggiungere o aggiornare un test di deserializzazione. Usa una risposta API reale se riesci a catturarne una, altrimenti un payload JSON sintetico che rifletta il comportamento API effettivo va bene.

contributi

Sentiti libero di aprire issue GitHub per suggerimenti, domande, bug. Le PR sono benvenute. Email: rewe at byte dot rest.

attribuzione

Categorie