57 votes

Analyse syntaxique de la chaîne User-Agent HTTP

Quelle est la meilleure méthode pour analyser une chaîne User-Agent en Python afin de détecter de manière fiable

  1. Navigateur
  2. Version du navigateur
  3. OS

Ou peut-être toute bibliothèque d'aide qui le fait

0 votes

Plus précisément, dépendre des systèmes d'exploitation et des versions des navigateurs pour la détection des capacités n'est pas une bonne stratégie. Quel problème essayez-vous de résoudre ?

1 votes

Nous avons un simple formulaire de rapport de ticket pour notre application web. Et nous demandons fréquemment aux utilisateurs quel est le serveur/OS, etc. Nous pourrions donc simplement le détecter à l'avance et demander à l'utilisateur de confirmer. Si ce n'est pas si simple, nous nous contenterons d'effacer l'agent utilisateur, mais nous devrons toujours poser des questions, car l'utilisateur peut utiliser un autre navigateur pour soumettre le ticket.

0 votes

Vous pouvez laisser Python rendre le formulaire et utiliser Javascript pour modifier les valeurs des champs de saisie en fonction du système d'exploitation actuel et de tout ce que vous souhaitez.

81voto

Shekhar Points 3632

J'ai finalement décidé d'écrire le mien, et je suis heureux du résultat. N'hésitez pas à utiliser/modifier/m'envoyer des patchs, etc.

C'est ici : http://pypi.python.org/pypi/httpagentparser

Exemple d'utilisation :

>>> import httpagentparser
>>> s = "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.9 (KHTML, like Gecko) \
        Chrome/5.0.307.11 Safari/532.9"
>>> print(httpagentparser.simple_detect(s))
('Linux', 'Chrome 5.0.307.11')
>>> print(httpagentparser.detect(s))
{'os': {'name': 'Linux'},
 'browser': {'version': '5.0.307.11', 'name': 'Chrome'}}

>>> s = "Mozilla/5.0 (Linux; U; Android 2.3.5; en-in; HTC_DesireS_S510e Build/GRJ90) \
        AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"
>>> print(httpagentparser.simple_detect(s))
('Android Linux 2.3.5', 'Safari 4.0')
>>> print(httpagentparser.detect(s))
{'dist': {'version': '2.3.5', 'name': 'Android'},
'os': {'name': 'Linux'},
'browser': {'version': '4.0', 'name': 'Safari'}}

0 votes

Cela ne semble pas fonctionner particulièrement bien pour les téléphones mobiles. En particulier, le blackberry n'est pas détecté. (mais vous avez mon +1 pour l'avoir écrit !)

4 votes

@Jason Sundram Si vous aidez en fournissant les chaînes d'agents et les résultats attendus, blackberry, d'autres peuvent être supportés. Vérifiez github.com/shon/httpagentparser/issues

0 votes

J'étais intéressé par la comparaison, mais c'est un point juste. Rétracté.

10voto

UASparser pour Python par Hicro Kee. Mise à jour automatique du fichier de données et du cache à partir d'un serveur distant avec vérification de la version.

8voto

solarmist Points 745

Werkzeug intègre l'analyse des agents utilisateurs.

Nouveau lien (juin 2018) http://werkzeug.pocoo.org/docs/0.14/utils/#module-werkzeug.useragents

0 votes

Intéressant. J'ai rapidement vérifié le code. C'est vraiment simple, un code agréable, essentiellement une série de regex pour correspondre à une chaîne d'agents. Ce qui est intéressant, c'est de voir comment cela fonctionne. Un avantage de Werkzeug est qu'il détecte aussi la langue, tandis que l'avantage de httpagentparaser est qu'il détecte aussi la version du système d'exploitation.

1 votes

Le lien actuel est tool.pocoo.org/docs/0.14/utils/#module-tool.useragents ; SO rejette ce changement car il est trop petit.

8voto

Chris W. Points 7182

Les autres réponses à cette question sont plutôt anciennes maintenant. Je pense que la nouvelle norme en matière d'analyse de l'agent utilisateur du navigateur est la méthode de Browserscope analyseur d'agent utilisateur .

Également disponible de manière pratique avec le les mêmes modèles de correspondance sur de nombreuses autres langues . Un jour, vous voudrez peut-être aussi analyser certaines chaînes UA en JavaScript et vous n'aurez pas à vous soucier d'une analyse incohérente.

6voto

James Broadhead Points 752

Après avoir comparé ces suggestions avec le corpus complet des agents utilisateurs de Firefox J'ai trouvé que l'analyse du numéro de version pour la comparaison est assez pauvre.

Si c'est ce dont vous avez besoin, je vous suggère de jeter un coup d'oeil à UAparser qui faisait autrefois partie de la browserscope projet. Documentation ici.

6 votes

Je pense qu'une version plus récente se trouve dans ce dépôt : github.com/tobie/ua-parser

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X