Werkzeug: Das Parsen des Werkzeug-Benutzeragenten ist für das Motorola One Macro-Android-Telefon deaktiviert

Erstellt am 3. Sept. 2020  ·  8Kommentare  ·  Quelle: pallets/werkzeug

Ich habe dies in einer Flask-App bemerkt, aber das verwendet werkzeug, um Useragent-Informationen zu analysieren, und sah das gleiche Verhalten sowohl im Flask-Anforderungsobjekt als auch im eigenständigen werkzeug-Useragent-Parser.

Es sieht so aus, als würde das Vorhandensein des Teilstrings "mac" in "macro" (dem Gerätemodell) ihn abwerfen. Ich bin jedoch der Meinung, dass dies durch das klare "Linux" und / oder "Android 9" außer Kraft gesetzt werden sollte.

>>> from werkzeug.useragents import UserAgent
>>> UserAgent("Mozilla/5.0 (Linux; Android 9; motorola one macro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.111 Mobile Safari/537.36").platform
'macos'

Ich würde erwarten, dass platform für diese Useragent-Zeichenfolge "android" ist.

Umgebung: Linux

  • Python-Version: 3.7.3
  • Werkzeugversion: 1.01
bug user-agent

Hilfreichster Kommentar

Anstatt dies intern zu tun, können Sie möglicherweise eine Abhängigkeit von der ua-Parser- Bibliothek hinzufügen. Ich habe eine Überprüfung des Projekts durchgeführt und es basiert auf einem ziemlich beliebten sprachübergreifenden Kern, der einen sehr großen Testsatz enthält . Die Python-Version unterstützt eine Vielzahl von Python-Versionen und der Code selbst sollte ziemlich stabil sein.

Alle 8 Kommentare

Das Problem ist, dass UserAgentParser die Plattform findet, indem es naiv nach Schlüsselwörtern sucht.

Hier ist das relevante Code-Snippet:

    platforms: Any = (
        (" cros ", "chromeos"),
        ("iphone|ios", "iphone"),
        ("ipad", "ipad"),
        (r"darwin|mac|os\s*x", "macos"),
        ("win", "windows"),
        (r"android", "android"),
        ...

In Ihrem Fall findet "darwin|mac|os\s*x" eine Übereinstimmung, bevor "android" durchsucht wird. Nach dem, was ich von Benutzeragenten-Headern gesehen habe, können sie stark variieren. Vielleicht kann jemand, der mehr Erfahrung hat, bessere Regex-Muster vorschlagen. Ich mache mir Sorgen, dass unsere einfache Keyword-Suche unzureichend ist und dass es weitere unbemerkte Fehler wie Ihren geben könnte.

Anstatt dies intern zu tun, können Sie möglicherweise eine Abhängigkeit von der ua-Parser- Bibliothek hinzufügen. Ich habe eine Überprüfung des Projekts durchgeführt und es basiert auf einem ziemlich beliebten sprachübergreifenden Kern, der einen sehr großen Testsatz enthält . Die Python-Version unterstützt eine Vielzahl von Python-Versionen und der Code selbst sollte ziemlich stabil sein.

Ich biete eine PR an, es sei denn, Sie möchten eine Pause einlegen. Scheint eine gute Lösung zu sein.

Ich würde gerne einen Sprung drauf machen. Vielen Dank!

Rad! Vielen Dank!

Ich bin froh, eine PR in Betracht zu ziehen, die die Übereinstimmungsregeln anpasst, um zu korrigieren, wie dieser Agent übereinstimmt, aber wir werden keine Abhängigkeit dafür hinzufügen.

Das ua-parser -Paket findet den geeigneten Benutzeragenten mithilfe von Regex-Mustern (ähnlich wie bei unserem Ansatz, aber offensichtlich gründlicher). Ihre Regex-Muster nehmen ~ 5500 Codezeilen ein .

Ich denke, es ist klar, dass wir kein vollständiges UserAgentParser anbieten können, ohne ua-parser als Abhängigkeit hinzuzufügen oder Teile ihres Codes in Werkzeug aufzunehmen.

Alternativ können wir der Readme-Datei und / oder den Dokumenten eine Nachricht hinzufügen, um zu erklären, dass unser UserAgentParser grundlegend ist und in vielen Szenarien nicht funktioniert.

Ich habe # 1989 geöffnet, um diese Plattformzeichenfolge zu adressieren, aber es ist alles andere als eine vollständige Lösung für den Rest des Gesprächs hier.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

golf-player picture golf-player  ·  10Kommentare

alexgurrola picture alexgurrola  ·  5Kommentare

davidism picture davidism  ·  9Kommentare

d42 picture d42  ·  6Kommentare

sorenh picture sorenh  ·  4Kommentare