4.4 KiB
4.4 KiB
Guide de comparaison Python vs Rust
Objectif
Comparer exactement ce que Python envoie vs ce que Rust envoie lors de l'appel à track/getFileUrl.
Étape 1: Tester Python avec le fake server
Terminal 1 - Démarrer le fake server:
cd pmoqobuz/test_python_qobuz
python3 fake_qobuz_server.py
Laissez ce terminal ouvert. Il affichera tous les détails des requêtes.
Terminal 2 - Tester Python:
cd pmoqobuz/test_python_qobuz
# Patcher pour utiliser localhost
python3 patch_for_fake.py
# Lancer le test simplifié
python3 test_getfileurl.py
Entrer vos credentials:
- Username:
eric@coissac.eu(ou Entrée) - Password: votre mot de passe
Terminal 1 - OBSERVER:
Le serveur affichera 2 requêtes:
- POST /api.json/0.2/user/login - Login (pas de signature)
- POST /api.json/0.2/track/getFileUrl - ⚠️ C'EST CELLE-CI QU'ON VEUT!
Pour la requête track/getFileUrl, notez EXACTEMENT:
Headers:
X-App-Id: ???
X-User-Auth-Token: ???
Content-Type: ???
Content-Length: ???
Body (Form Data):
track_id: ???
format_id: ???
intent: ???
request_ts: ??? ← FORMAT DU TIMESTAMP
request_sig: ??? ← SIGNATURE MD5
IMPORTANT: Copiez/collez ou prenez une capture d'écran de cette requête!
Terminal 2 - Restaurer:
python3 patch_for_fake.py restore
Étape 2: Tester Rust avec le fake server
Terminal 1 - Fake server toujours actif
Terminal 2 - 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 2 - Compiler et lancer:
cd pmoqobuz
cargo build --example lazy_loading
cargo run --example lazy_loading
Terminal 1 - OBSERVER:
Cherchez la requête POST /api.json/0.2/track/getFileUrl
Notez les mêmes détails que pour Python:
Headers:
X-App-Id: ???
X-User-Auth-Token: ???
Content-Type: ???
Content-Length: ???
Body (Form Data):
track_id: ???
format_id: ???
intent: ???
request_ts: ??? ← FORMAT DU TIMESTAMP
request_sig: ??? ← SIGNATURE MD5
Terminal 2 - Restaurer le code Rust:
Remettre l'URL originale:
const API_BASE_URL: &str = "https://www.qobuz.com/api.json/0.2";
Étape 3: Comparer
Placez les deux requêtes côte à côte et cherchez les différences:
Différences possibles:
- Ordre des paramètres dans le form data
- Format du timestamp (nombre de décimales?)
- Signature MD5 (devrait être différente car timestamp différent)
- Headers manquants (Content-Type?)
- Valeurs des headers (X-App-Id différent?)
- Encoding du form data
Ce qu'on DOIT voir identique:
- Méthode: POST (pas GET)
- Headers X-App-Id et X-User-Auth-Token présents
- Paramètres: track_id, format_id, intent, request_ts, request_sig
- Content-Type: application/x-www-form-urlencoded
Ce qui PEUT être différent:
- Valeur de request_ts (timestamp différent)
- Valeur de request_sig (car timestamp différent)
- Ordre des paramètres (si ça n'affecte pas la signature)
Ce qui NE DOIT PAS être différent:
- Format du timestamp (même nombre de décimales)
- Type de requête (POST)
- Présence de tous les headers requis
Exemple de comparaison
Python (référence):
POST /api.json/0.2/track/getFileUrl
Headers:
X-App-Id: 798273057
X-User-Auth-Token: NAP_hlSUqU...
Content-Type: application/x-www-form-urlencoded
Content-Length: 156
Body:
track_id=19557883&format_id=27&intent=stream&request_ts=1734170123.456789&request_sig=abc123def456...
Rust (à corriger):
POST /api.json/0.2/track/getFileUrl
Headers:
X-App-Id: 798273057
X-User-Auth-Token: NAP_hlSUqU...
Content-Type: application/x-www-form-urlencoded
Content-Length: 156
Body:
track_id=19557883&format_id=27&intent=stream&request_ts=1734170123.45678&request_sig=xyz789abc012...
^
Une décimale en moins?
Notes
- Le fake server log TOUT, donc vous verrez aussi les requêtes de login
- Concentrez-vous sur la requête
/track/getFileUrlqui nécessite une signature - Prenez des captures d'écran ou copiez les logs pour comparaison facile