从用户代理获取应用程序名称

Get appname from 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

找到了判断浏览器的方法,但是不知道怎么获取app。

你可以这样得到:

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

如果您只是尝试解析 header,或者尝试将 User-agent 字符串与访问您服务器的已知 apps/services 进行匹配,则还不太清楚。由于前一个问题由Adem回答,这里对后者进行解释。

无法找到通过User-agentheader访问您的服务器的应用程序的确切名称。虽然 HTTP/1.1 Standard does specify User-agent string format, it's mainly used by human-operated browsers, while bots and other software may use simplified format or even spoof it (See wiki).

因此,在您的情况下,最好列出您要跟踪的应用程序,然后在网络上找到它们的 User-agent header(例如 this or this) , 这样您就可以解析 HTTP header 并将 User-agent 字符串与列表中的项目进行匹配。