Analysez un User-Agent : navigateur, OS et appareil
L’en-tête User-Agent est compact, mais difficile à lire : les éditeurs réunissent sur une ligne des jetons de produit, des marqueurs de compatibilité, des indices sur le système et des informations sur l’appareil.
Lancer gratuitement
Cet analyseur produit un résultat prévisible contenant le nom et la version du navigateur, le système d’exploitation et sa version, ainsi qu’une catégorie pratique d’appareil. Ses règles sont transparentes et déterministes : une entrée identique donne toujours la même sortie, sans appel réseau, hasard, empreinte numérique ni enrichissement caché.
Fournissez l’en-tête complet chaque fois que possible
Collez la valeur de l’en-tête HTTP User-Agent dans le champ user_agent, avec tous les jetons de produit et la section de plateforme entre parenthèses. Une chaîne complète apporte assez d’indices pour différencier des navigateurs issus de la même famille de rendu. Par exemple, les chaînes actuelles d’Edge, Opera, Samsung Internet et Chrome peuvent toutes contenir le jeton Chrome : l’analyseur recherche donc leurs identifiants précis avant d’accepter la correspondance Chrome générique. L’ordre compte aussi pour Firefox et Chrome sous iOS, car les exigences d’Apple leur imposent des chaînes différentes de leurs versions de bureau. Les espaces placés au début ou à la fin sont ignorés, mais une valeur vide ou uniquement composée d’espaces est refusée comme entrée incorrecte, faute d’élément à classer. L’analyseur ne contacte pas l’appareil, ne consulte aucune adresse IP, n’examine pas les Client Hints et ne rapproche pas la chaîne d’autres identifiants. Si vous avez besoin des versions, transmettez l’en-tête original plutôt qu’une étiquette abrégée. Une chaîne tronquée ou inconnue peut être acceptée, mais les champs sans indice reconnu renvoient Inconnu et une version nulle, sans précision inventée.
Comprenez les règles du navigateur et du système
La détection suit un ordre de priorité fixe fondé sur les jetons User-Agent courants. Les jetons particuliers Edg, OPR, SamsungBrowser, CriOS et FxiOS sont évalués avant les motifs généraux de Chrome, Firefox et Safari. Un navigateur basé sur Chromium n’est ainsi pas étiqueté Chrome simplement parce que sa chaîne mentionne ce nom pour assurer la compatibilité. Pour Safari, le jeton Version est utilisé, car le jeton Safari séparé désigne la famille du produit et non la version publique du navigateur. Le système est analysé selon la même prudence : Windows Phone précède Windows de bureau, Android précède Linux générique et iOS précède les fragments de compatibilité macOS. Les traits de soulignement des versions Apple deviennent des points. Les valeurs Windows NT sont associées aux versions usuelles lorsqu’une correspondance conventionnelle est fiable ; Windows NT 10.0 est volontairement rendu par « 10 ou 11 », l’ancien en-tête ne permettant pas de les distinguer sûrement. Il s’agit de règles connues, et non de conclusions probabilistes. Les nouveaux produits, les chaînes réduites pour la confidentialité, les vues web intégrées et les variantes de fabricants peuvent donc produire Inconnu ou une famille générale. Cette retenue est préférable à une précision fictive.
Considérez le type d’appareil comme une catégorie, pas une identité
Le résultat device_type fournit une catégorie opérationnelle large : ordinateur, mobile, tablette, robot ou inconnu. Les indices de tablette sont testés avant les indices mobiles généraux, car de nombreuses tablettes Android contiennent Android tout en omettant volontairement Mobile. Les téléphones reconnus, iPhone, iPod, Windows Phone et autres jetons mobiles renvoient mobile. Les termes habituels des robots d’exploration renvoient robot ; cette information facilite les synthèses de journaux, mais ne remplace ni une protection multicouche contre les abus ni l’authentification des robots vérifiés. Un système ou navigateur de bureau reconnu donne ordinateur par défaut ; une chaîne sans indice connu du navigateur ou du système donne inconnu. Ces catégories décrivent ce que l’émetteur déclare, et non un appareil physique vérifié. Une chaîne User-Agent peut être modifiée, un client automatisé peut imiter un navigateur et les protections modernes réduisent volontairement les détails. Utilisez le résultat pour les rapports, l’enrichissement des journaux, des indications de compatibilité ou une expérience initiale raisonnable. Ne l’utilisez pas comme frontière de sécurité, empreinte unique ou preuve de possession. Pour les accès, paiements ou fraudes, associez autorisation serveur et signaux de risque spécialisés.
Cas d’usage
Enrichir les journaux de requêtes
Transformez les en-têtes bruts en colonnes cohérentes de navigateur, système et appareil pour simplifier les rapports d’exploitation.
Synthétiser le trafic
Regroupez les visites par grandes catégories de navigateur et d’appareil sans transmettre l’en-tête à un service tiers.
Choisir des valeurs de compatibilité
Sélectionnez une interface initiale ou un message d’assistance adapté, tout en laissant la détection de fonctions faire autorité.
Questions fréquentes
Combien coûte une analyse ?
Chaque requête API coûte $0.002. La version déterministe du navigateur peut aussi s’exécuter localement dans la page.
Pourquoi Windows est-il indiqué comme 10 ou 11 ?
Les chaînes User-Agent classiques exposent généralement Windows NT 10.0 pour les deux ; l’en-tête seul ne permet donc pas de les distinguer.
Peut-on utiliser User-Agent pour une décision de sécurité ?
Non. Un client peut modifier ou imiter l’en-tête. Traitez le résultat comme une métadonnée descriptive, jamais comme une identité vérifiée.
Que se passe-t-il si le navigateur n’est pas reconnu ?
Le navigateur est indiqué comme Inconnu et sa version comme nulle. Les indices reconnus du système ou de l’appareil restent affichés.
L’analyse interroge-t-elle un service externe ?
Non. Elle applique des règles locales et déterministes, sans requête réseau, empreinte numérique ni enrichissement par IP.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/web/user-agent-parse \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}'const res = await fetch("https://api.kit.forhosting.com/web/user-agent-parse", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/user-agent-parse",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/user-agent-parse", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/user-agent-parse", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.user_agent_parse",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
timeout_sec | 30 |
max_crawl_pages | 25 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |