从user-agent获取appname

时间:2016-06-14 11:50:39

标签: python user-agent

我有像

这样的字符串
VK/28 CFNetwork/711.4.6 Darwin/14.0.0
Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C75 Safari/601.1
Instagram 8.2.0 (iPhone4,1; iPhone OS 8_4; ru_RU; ru; scale=2.00; 640x960)    AppleWebKit/420+
Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C75 Safari/601.1

我想知道每个字符串使用的是什么应用程序。这是

vk
mozilla
instagram
mozilla

我找到了确定浏览器的方法,但是如何获取应用程序我不知道。

2 个答案:

答案 0 :(得分:1)

你可以这样:

>>> log = '''VK/28 CFNetwork/711.4.6 Darwin/14.0.0
... Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C75 Safari/601.1
... Instagram 8.2.0 (iPhone4,1; iPhone OS 8_4; ru_RU; ru; scale=2.00; 640x960)    AppleWebKit/420+
... Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C75 Safari/601.1
... '''
>>> agents = [line.split()[0].split('/')[0] for line in log.splitlines()]
>>> print '\n'.join(agents)
VK
Mozilla
Instagram
Mozilla

答案 1 :(得分:1)

如果您只是尝试解析标头,或尝试将用户代理字符串与访问您服务器的已知应用/服务进行匹配,则不太清楚。由于前一个问题由Adem回答,所以这是对后者的解释。

无法通过User-agent标头找到访问您服务器的应用的确切名称。虽然HTTP/1.1 Standard确实指定了用户代理字符串格式,但它主要由人工操作的浏览器使用,而机器人和其他软件可能使用简化格式甚至欺骗它(请参阅wiki)。 / p>

因此,在您的情况下,最好提供一个您想要跟踪的应用列表,然后在网络上找到他们的用户代理标题(例如thisthis ),以便您可以解析HTTP标头并将用户代理字符串与列表中的项匹配。