Werkzeug: A análise useragent Werkzeug está desativada para o telefone Motorola One Macro Android

Criado em 3 set. 2020  ·  8Comentários  ·  Fonte: pallets/werkzeug

Percebi isso em um aplicativo flask, mas que usa o werkzeug para analisar as informações do useragent e vi o mesmo comportamento no objeto de solicitação do flask e no analisador do useragent werkzeug autônomo.

Parece que a presença da substring "mac" em "macro" (o modelo do dispositivo) está prejudicando-a. No entanto, eu sinto que isso deve ser substituído pelo claro "Linux" e / ou "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'

Eu esperaria que platform para esta string useragent fosse "android".

Ambiente: Linux

  • Versão Python: 3.7.3
  • Versão Werkzeug: 1.01
bug user-agent

Comentários muito úteis

Em vez de fazer isso internamente, talvez você possa considerar a adição de dependência na biblioteca ua-parser . Fiz uma revisão do projeto e é baseado em um núcleo de várias linguagens bastante popular que tem um conjunto de testes muito grande. A versão python suporta uma grande variedade de versões python e o código em si deve ser bastante estável.

Todos 8 comentários

O problema é que UserAgentParser encontra a plataforma procurando ingenuamente por palavras-chave.

Aqui está o snippet 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"),
        ...

No seu caso, "darwin|mac|os\s*x" encontra uma correspondência antes de "android" ser pesquisado. Pelo que vi dos cabeçalhos do agente do usuário, eles podem variar muito. Talvez alguém com mais experiência possa sugerir melhores padrões de regex. Preocupa-me que nossa busca simples por palavra-chave seja inadequada e que possa haver mais bugs despercebidos como o seu.

Em vez de fazer isso internamente, talvez você possa considerar a adição de dependência na biblioteca ua-parser . Fiz uma revisão do projeto e é baseado em um núcleo de várias linguagens bastante popular que tem um conjunto de testes muito grande. A versão python suporta uma grande variedade de versões python e o código em si deve ser bastante estável.

Vou oferecer um PR, a menos que você queira tentar. Parece uma boa solução.

Eu gostaria de dar uma olhada nisso. Obrigado!

Rad! Obrigado!

Fico feliz em considerar um PR que ajusta as regras de correspondência para corrigir como esse agente é correspondido, mas não adicionaremos uma dependência para isso.

O pacote ua-parser encontra o agente de usuário apropriado usando padrões regex (semelhante à nossa abordagem, mas obviamente mais completo). Seus padrões de regex ocupam aproximadamente 5500 linhas de código .

Acho que está claro que não podemos oferecer um UserAgentParser completo sem adicionar ua-parser como uma dependência ou incluir partes de seu código no Werkzeug.

Como alternativa, podemos adicionar uma mensagem no leia-me e / ou documentos para explicar que nosso UserAgentParser é básico e não funcionará em muitos cenários.

Abri o nº 1989 para tratar dessa string de plataforma, mas está longe de ser uma correção completa para o resto da conversa aqui.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

ngaya-ll picture ngaya-ll  ·  8Comentários

d42 picture d42  ·  6Comentários

Nessphoro picture Nessphoro  ·  6Comentários

caiz picture caiz  ·  3Comentários

davidism picture davidism  ·  9Comentários