Werkzeug: El análisis de Werkzeug useragent está desactivado para el teléfono Motorola One Macro Android

Creado en 3 sept. 2020  ·  8Comentarios  ·  Fuente: pallets/werkzeug

Noté esto en una aplicación de matraz, pero que usa werkzeug para analizar la información de useragent y vi el mismo comportamiento tanto en el objeto de solicitud de matraz como en el analizador independiente de werkzeug useragent.

Parece que la presencia de la subcadena "mac" en "macro" (el modelo del dispositivo) lo está desechando. Sin embargo, creo que eso debería ser anulado por el claro "Linux" y / o "Android 9".

>>> 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'

Esperaría que el platform para esta cadena useragent sea "android".

Entorno: Linux

  • Versión de Python: 3.7.3
  • Versión Werkzeug: 1.01
bug user-agent

Comentario más útil

En lugar de hacer esto internamente, tal vez pueda considerar agregar dependencia en la biblioteca ua-parser . Hice una revisión del proyecto y se basa en un núcleo de idiomas cruzados bastante popular que tiene un conjunto de pruebas muy grande. La versión de Python admite una amplia gama de versiones de Python y el código en sí debería ser bastante estable.

Todos 8 comentarios

El problema es que UserAgentParser encuentra la plataforma buscando ingenuamente palabras clave.

Aquí está el fragmento de código relevante:

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

En su caso, "darwin|mac|os\s*x" encuentra una coincidencia antes de que se busque "android" . Por lo que he visto de los encabezados de los agentes de usuario, pueden variar enormemente. Quizás alguien que tenga más experiencia pueda sugerir mejores patrones de expresiones regulares. Me preocupa que nuestra simple búsqueda de palabras clave sea inadecuada y que pueda haber más errores desapercibidos como el suyo.

En lugar de hacer esto internamente, tal vez pueda considerar agregar dependencia en la biblioteca ua-parser . Hice una revisión del proyecto y se basa en un núcleo de idiomas cruzados bastante popular que tiene un conjunto de pruebas muy grande. La versión de Python admite una amplia gama de versiones de Python y el código en sí debería ser bastante estable.

Ofreceré un PR a menos que quieras intentarlo. Parece una buena solución.

Me gustaría intentarlo. ¡Gracias!

Rad! ¡Gracias!

Me complace considerar un RP que ajuste las reglas de coincidencia para corregir cómo se empareja este agente, pero no agregaremos una dependencia para esto.

El paquete ua-parser encuentra el agente de usuario apropiado usando patrones de expresiones regulares (similar a nuestro enfoque, pero obviamente más completo). Sus patrones de expresiones regulares ocupan ~ 5500 líneas de código .

Creo que está claro que no podemos ofrecer un UserAgentParser completo sin agregar ua-parser como dependencia o incluir partes de su código en Werkzeug.

Alternativamente, podemos agregar un mensaje en el archivo Léame y / o documentos para explicar que nuestro UserAgentParser es básico y no funcionará en muchos escenarios.

Abrí # 1989 para abordar esta cadena de plataforma, pero está lejos de ser una solución completa para el resto de la conversación aquí.

¿Fue útil esta página
0 / 5 - 0 calificaciones