Werkzeug: 摩托罗拉One Macro Android手机的Werkzeug useragent解析关闭

创建于 2020-09-03  ·  8评论  ·  资料来源: pallets/werkzeug

我在flask应用程序中注意到了这一点,但是它使用werkzeug解析用户代理信息,并且在flask请求对象和独立的werkzeug useragent解析器中都看到了相同的行为。

看起来“宏”(设备模型)中存在子字符串“ mac”正在将其抛弃。 但是,我觉得应该由清晰的“ Linux”和/或“ 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'

我希望此useragent字符串的platform是“ android”。

环境:Linux

  • Python版本:3.7.3
  • Werkzeug版本:1.01
bug user-agent

最有用的评论

而不是内部执行此操作,也许您可​​以考虑添加对ua-parser库的依赖。 我对该项目及其项目进行了审查,该项目基于一个非常流行的跨语言核心,该核心具有非常大的测试集。 python版本支持多种python版本,并且代码本身应该非常稳定。

所有8条评论

问题是UserAgentParser通过天真​​地搜索关键字来找到平台。

这是相关的代码片段:

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

在您的情况下, "darwin|mac|os\s*x"在搜索"android"之前找到匹配项。 从我对用户代理标头的了解来看,它们可能千差万别。 也许有更多经验的人可以建议更好的正则表达式模式。 我担心我们简单的关键字搜索不够,而且可能还会有更多像您一样的未被发现的错误。

而不是内部执行此操作,也许您可​​以考虑添加对ua-parser库的依赖。 我对该项目及其项目进行了审查,该项目基于一个非常流行的跨语言核心,该核心具有非常大的测试集。 python版本支持多种python版本,并且代码本身应该非常稳定。

除非您不想破解,否则我会提供PR。 似乎是一个很好的解决方案。

我想破解一下。 谢谢!

拉德! 谢谢!

我很高兴考虑一个PR,它会调整匹配规则以固定该代理的匹配方式,但是我们不会为此添加依赖项。

ua-parser包通过使用正则表达式模式找到合适的用户代理(类似于我们的方法,但显然更彻底)。 他们的正则表达式模式占用约5500行代码

我认为很明显,如果不添加ua-parser作为依赖项或将其部分代码包含到Werkzeug中,我们就无法提供完整的UserAgentParser

或者,我们可以在自述文件和/或文档中添加一条消息,以说明我们的UserAgentParser是基本的,在许多情况下不起作用。

我已经打开#1989来解决这个平台字符串,但是对于其余的对话而言,它还远未达到一个完整的解决方案。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

ngaya-ll picture ngaya-ll  ·  8评论

sorenh picture sorenh  ·  4评论

caiz picture caiz  ·  3评论

SimonSapin picture SimonSapin  ·  12评论

androiddrew picture androiddrew  ·  14评论