处理HTTP_USER_AGENT字符串信息

时间:2014-02-16 16:12:50

标签: html bash cgi user-agent

我有一个CGI脚本(用Bash编写),它将记录有关人们如何访问我的网站的一些信息。我通过$ HTTP_USER_AGENT获得了这类信息,但我想使用操作系统,浏览器类型,浏览器版本等不同的列将其记录在我的数据库中。以下是我的浏览器中字符串的样子:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36

在这种情况下,我想记录访问是使用Chrome版本32.0.1700.107从Mac OS X 10_9_1进行的。

我猜有人已经完成了这个字符串处理工作,我无法在StackOverflow中通过正确的关键字进行搜索。有谁知道怎么做?我可以将它从其他语言移植到Bash,我想这不会有问题!

提前谢谢大家!

2 个答案:

答案 0 :(得分:1)

正如devnull已经评论过的那样,自动解析这些字符串会很棘手。有很多很多浏览器,几乎没有任何浏览器构建相同的用户代理字符串。

如果您对使用Bash解析文本感兴趣,我建议学习使用正则表达式和linux命令行工具sed

例如,使用sed可以拉出任何Mac OS X实例,后跟版本号,如:

echo "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36" | sed 's/.*\(Mac\ OS\ X\ [0-9]\+_[0-9]\+_[0-9]\+\).*/\1/'

上面的sed命令匹配字符串Mac OS X #_#_#。数字用[0-9]表示,后面的加号表示允许重复。上面的命令返回以下内容:

Mac OS X 10_9_1

你可以运行类似的东西解析Chrome及其版本号如:

sed 's/.*\(Chrome\/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/'

这里还有更多的正则表达式魔术,例如匹配组(围绕我们想要保留在括号中的部分并用\ 1传递它)并转义保留字符,如空格,加号,句号和正斜杠。 / p>

答案 1 :(得分:0)

在这种情况下,raptastics有最好的答案但是如果你想要你可以很好地使用“Perl”并将$ HTTP_USER_AGENT拆分为“/”分隔符并使用键/值对处理它们。同样,你的问题的答案实际上取决于你正在做什么。