Analyser une requête URL en objet clé-valeur
Cet analyseur transforme une URL absolue complète ou une chaîne de requête brute en objet structuré de clés et de valeurs.
Lancer gratuitement
Il décode les séquences en pourcentage et les signes plus des formulaires, conserve les valeurs vides et regroupe les paramètres répétés dans des listes, dans leur ordre d’origine. Les séquences mal formées et l’UTF-8 invalide provoquent une erreur explicite plutôt qu’un remplacement silencieux. Vous pouvez examiner un lien dans le navigateur ou appeler l’API déterministe au tarif de $0.002 par élément depuis vos applications, tests et traitements d’importation.
Choisissez la forme d’entrée adaptée à votre source
Vous pouvez fournir une URL absolue complète, telle que <code>https://example.com/search?q=red+shoes</code>, une requête brute comme <code>q=red+shoes&page=2</code>, ou cette même requête précédée d’un point d’interrogation. Pour une URL absolue, seul le composant de requête est analysé : le schéma, l’autorité, le chemin et le fragment ne deviennent pas des champs. Une URL sans requête produit un objet de paramètres vide. Une entrée brute est entièrement considérée comme une requête après le retrait éventuel du point d’interrogation initial. Ce format convient lorsqu’un framework, un journal d’accès, un webhook ou une API de navigateur a déjà séparé la requête du reste de l’adresse. Chaque esperluette ouvre une nouvelle paire, tandis que le premier signe égal sépare le nom de sa valeur. Un nom sans signe égal est conservé avec une valeur vide, tout comme une affectation explicitement vide. Les segments vides entre deux esperluettes consécutives sont ignorés. Le résultat indique également le nombre de clés distinctes et de paires analysées : vous repérez ainsi les champs répétés sans recompter vous-même les propriétés de l’objet.
Comprenez le décodage et les clés répétées
Les noms et les valeurs sont décodés séparément selon les conventions habituellement appliquées aux formulaires dans les requêtes URL. Un signe plus devient une espace, tandis que les séquences <code>%HH</code> sont interprétées comme des octets UTF-8. Ainsi, <code>city=San+Jos%C3%A9</code> produit un texte Unicode lisible et un séparateur encodé comme <code>%26</code> reste dans une seule valeur au lieu d’ouvrir un nouveau champ. Le décodage n’a lieu qu’une fois : <code>%2520</code> donne <code>%20</code>, et non une espace. Lorsqu’une clé n’apparaît qu’une fois, sa valeur est une chaîne. Dès que la même clé décodée réapparaît, sa valeur devient une liste contenant toutes les occurrences dans l’ordre de la source. Cette règle représente les groupes de cases à cocher, filtres, étiquettes et autres sélections multiples sans perdre d’information ni inventer des propriétés numérotées. La répétition est déterminée après décodage : deux graphies encodées équivalentes d’un même nom sont donc regroupées. Les valeurs vides répétées sont elles aussi conservées. L’analyseur ne déduit ni booléens, ni nombres, ni dates et ne transforme pas la notation entre crochets en objets imbriqués. Toutes les valeurs simples restent des chaînes afin que votre code applique ensuite sa propre conversion métier en connaissance de cause.
Bloquez les données corrompues avant leur traitement
Les analyseurs permissifs peuvent conserver un signe de pourcentage isolé, accepter une séquence d’un seul chiffre ou insérer un caractère de remplacement lorsque les octets encodés ne constituent pas un UTF-8 valide. Des identifiants endommagés semblent alors exploitables et des divergences difficiles à diagnostiquer apparaissent entre navigateur, serveur et procédure de vérification de signature. Cette capacité exige que chaque signe de pourcentage soit suivi d’exactement deux chiffres hexadécimaux, puis vérifie que chaque suite d’octets décodée forme un UTF-8 valide. Si l’une de ces conditions échoue, la requête renvoie une erreur d’entrée invalide plutôt qu’un objet partiel. L’analyse est pure et déterministe : aucun accès réseau, aucune redirection, aucune lecture de l’horloge, aucun aléa et aucun état conservé entre les appels. Considérez les chaînes obtenues comme des données, et non comme du HTML, du code, un chemin de fichier ou une expression de base de données fiable. Le décodage restitue les caractères, mais ne sécurise pas leur destination. Pour l’automatisation, l’API coûte $0.002 par élément et fournit une étape de normalisation stable avant validation, routage, comparaison ou stockage. Dans le navigateur, vous pouvez inspecter rapidement un lien copié sans contacter sa destination.
Cas d’usage
Examiner une URL copiée
Transformez une longue URL de recherche, de campagne ou de rappel en champs lisibles sans ouvrir ni contacter sa destination.
Normaliser les données d’un webhook
Analysez une requête brute avant la validation propre à votre application tout en conservant chaque valeur répétée.
Créer des jeux d’essai déterministes
Vérifiez précisément le décodage, les valeurs vides et les clés répétées dans les tests et traitements d’importation.
Questions fréquentes
Combien coûte une requête API ?
Chaque élément analysé coûte $0.002 via l’API. L’outil interactif du navigateur emploie la même logique déterministe.
Que se passe-t-il lorsqu’une clé apparaît plusieurs fois ?
Une occurrence unique donne une chaîne. En cas de répétition, la valeur devient une liste de toutes les occurrences dans leur ordre d’origine.
Les signes plus sont-ils convertis en espaces ?
Oui. Dans l’encodage courant des formulaires, le signe plus représente une espace. Utilisez %2B pour conserver un signe plus littéral.
L’analyseur déduit-il les nombres ou les booléens ?
Non. Toute valeur simple reste une chaîne, y compris le texte vide, les nombres et true ou false. Effectuez ensuite la conversion selon votre schéma.
Quelles erreurs d’encodage en pourcentage sont refusées ?
L’analyseur refuse un signe de pourcentage sans deux chiffres hexadécimaux et les octets qui ne constituent pas un UTF-8 valide.
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/query-string-parse \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"https://example.com/search?q=red+shoes&tag=sale&tag=new&empty="}'const res = await fetch("https://api.kit.forhosting.com/web/query-string-parse", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "https://example.com/search?q=red+shoes&tag=sale&tag=new&empty="
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/query-string-parse",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "https://example.com/search?q=red+shoes&tag=sale&tag=new&empty="
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/query-string-parse", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"https://example.com/search?q=red+shoes&tag=sale&tag=new&empty="}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"https://example.com/search?q=red+shoes&tag=sale&tag=new&empty="}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/query-string-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
{
"text": "https://example.com/search?q=red+shoes&tag=sale&tag=new&empty="
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.query_string_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. |