Benutzerdefinierte User-Agent-Strings in Web Sources ermöglichen

Hallo zusammen,

ich arbeite gerade an einem Web Source Script für BookBeat (Audiobook-Streaming-Dienst) und bin dabei auf ein interessantes Problem gestoßen, das ich hier gerne teilen möchte.

Mein Script hat anfangs immer einen 403 Forbidden Fehler von der BookBeat API bekommen. Komischerweise konnte ich die gleiche URL problemlos im Browser aufrufen, nur Mp3tag wurde abgelehnt.

Nach einigem Debugging (mit webhook.site um die tatsächlich gesendeten Header zu sehen) habe ich herausgefunden, dass es am User-Agent liegt, den Mp3tag sendet.

Ich hatte in meinem Script versucht, einen benutzerdefinierten User-Agent zu setzen:

[UserAgent]=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36

Aber Mp3tag ignoriert diesen String komplett. Stattdessen wird ein interner User-Agent gesendet:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.3

BookBeat (und vermutlich auch andere APIs mit Bot-Schutz) lehnt diesen User-Agent ab. Interessanterweise funktioniert es aber, wenn ich [UserAgent]=1 setze - dann sendet Mp3tag Mp3tag/3.32 und das wird akzeptiert.

Ich habe verschiedene User-Agents mit curl getestet:

  • Mp3tag/3.32 → 200 OK
  • Aktueller Chrome User-Agent → 200 OK
  • Der interne Mp3tag User-Agent → 403 Forbidden

Der Workaround mit [UserAgent]=1 funktioniert für meinen Fall, aber es wäre natürlich flexibler, wenn man auch eigene User-Agent-Strings setzen könnte.

Wäre es möglich, das [UserAgent]-Feld so zu erweitern, dass es nicht nur 1 (für Mp3tag/Version) akzeptiert, sondern auch beliebige Strings? Das würde Script-Autoren mehr Flexibilität geben, wenn sie mit APIs arbeiten, die bestimmte User-Agents erwarten.

Alternativ könnte natürlich auch der interne User-Agent aktualisiert werden, falls der aktuelle aus irgendeinem Grund von manchen Servern als verdächtig eingestuft wird.

  • Mp3tag Version: 3.32
  • Windows 10
  • Web Source: Eigenes BookBeat JSON Script

Wie gesagt, für mich persönlich funktioniert der Workaround mit [UserAgent]=1. Ich wollte das Thema aber trotzdem mal ansprechen, falls andere Leute ähnliche Probleme haben oder es eine einfache Möglichkeit gibt, benutzerdefinierte User-Agents zu unterstützen.

Herzliche Grüße und ein guten Rutsch,
Christopher