Files
pmomusic/pmoqobuz/test_python_qobuz/INSTRUCTIONS.md

3.3 KiB

Instructions de test - Comparaison Python vs Rust

Étape 1: Tester le script Python contre l'API réelle

cd pmoqobuz/test_python_qobuz
python3 test_qobuz.py

Ce que vous devez entrer:

  • Username: eric@coissac.eu (ou appuyez Entrée pour défaut)
  • Password: votre mot de passe Qobuz

Résultat attendu: Si le script Python réussit, cela confirme que:

  • La méthode de signature Python est correcte
  • Les secrets extraits par le spoofer fonctionnent
  • Notre implémentation Rust a un problème spécifique

Si le script Python échoue aussi, cela signifie:

  • Le problème est dans les secrets eux-mêmes
  • Ou Qobuz a changé leur API récemment

Étape 2: Analyser les requêtes avec le fake server

Terminal 1 - Démarrer le fake server:

cd pmoqobuz/test_python_qobuz
python3 fake_qobuz_server.py

Le serveur affichera tous les détails des requêtes reçues.

Terminal 2 - Tester avec Python:

cd pmoqobuz/test_python_qobuz
python3 patch_for_fake.py                    # Redirige vers localhost
python3 test_qobuz.py                         # Entrer credentials

Observer dans Terminal 1:

  • Méthode HTTP (GET/POST) pour /track/getFileUrl
  • Headers exactes (X-App-Id, X-User-Auth-Token)
  • Paramètres et leur ordre
  • Format du request_ts (timestamp)
  • Format du request_sig (signature MD5)
  • Content-Type du body

Terminal 2 - Restaurer:

python3 patch_for_fake.py restore

Étape 3: Tester Rust contre le fake server

Modifier temporairement le code Rust:

Éditer pmoqobuz/src/api/mod.rs ligne ~32:

// Avant:
const API_BASE_URL: &str = "https://www.qobuz.com/api.json/0.2";

// Après (temporaire!):
const API_BASE_URL: &str = "http://localhost:8080/api.json/0.2";

Terminal 1 - Fake server toujours actif

Terminal 2 - Lancer l'exemple Rust:

cd pmoqobuz
cargo run --example lazy_loading

Observer dans Terminal 1: Les mêmes détails que pour Python.

Restaurer le code Rust:

const API_BASE_URL: &str = "https://www.qobuz.com/api.json/0.2";

Étape 4: Comparer

Comparez côte à côte:

Python (référence qui marche):

POST /api.json/0.2/track/getFileUrl
Headers:
  X-App-Id: 798273057
  X-User-Auth-Token: NAP_...
  Content-Type: application/x-www-form-urlencoded

Body:
  track_id=12345678
  format_id=27
  intent=stream
  request_ts=1734169183.123456
  request_sig=a1b2c3d4...

Rust (à corriger):

POST /api.json/0.2/track/getFileUrl
Headers:
  X-App-Id: ???
  X-User-Auth-Token: ???
  Content-Type: ???

Body:
  ??? ordre différent ???
  ??? timestamp différent ???
  ??? signature différente ???

Différences à chercher:

  1. Ordre des paramètres - l'ordre affecte-t-il la signature?
  2. Format du timestamp - nombre de décimales?
  3. Headers manquants - Content-Type?
  4. Signature MD5 - différente malgré mêmes inputs?
  5. Method - vraiment POST des deux côtés?

Script automatique

Pour simplifier, vous pouvez aussi utiliser:

./run_comparison.sh          # Test contre API réelle
./run_comparison.sh fake     # Test avec fake server (interactif)

Nettoyage

# Arrêter tous les fake servers
pkill -f fake_qobuz_server

# Restaurer raw.py si nécessaire
python3 patch_for_fake.py restore