Analisar query string de URL em objeto chave-valor
Este analisador transforma uma URL absoluta completa ou uma query string bruta em um objeto estruturado de chaves e valores.
Executar grátis
Ele decodifica escapes percentuais e sinais de adição usados por formulários, preserva valores vazios e reúne parâmetros repetidos em listas na ordem original. Escapes malformados e UTF-8 inválido geram um erro claro, sem substituição silenciosa de caracteres. Você pode usá-lo no navegador para examinar um link ou chamar a API determinística por US$ 0,002 por item em aplicativos, testes e fluxos de ingestão que precisam sempre do mesmo resultado.
Escolha a forma de entrada adequada à sua origem
Você pode enviar uma URL absoluta completa, como <code>https://example.com/search?q=red+shoes</code>, uma consulta bruta, como <code>q=red+shoes&page=2</code>, ou essa mesma consulta com um ponto de interrogação no início. Em uma URL absoluta, somente o componente de consulta é analisado; esquema, autoridade, caminho e fragmento não viram campos. Uma URL sem consulta retorna um objeto de parâmetros vazio. A entrada bruta é tratada integralmente como dados de consulta depois da remoção de um ponto de interrogação inicial opcional. Isso é útil quando um framework, um log de acesso, um webhook ou uma API do navegador já separou a consulta do restante do endereço. Cada sinal & inicia um novo par, enquanto o primeiro sinal de igual separa o nome do valor. Um nome sem sinal de igual é preservado com valor vazio, assim como uma atribuição explicitamente vazia. Segmentos vazios entre sinais & consecutivos são ignorados. O resultado também informa a quantidade de chaves distintas e de pares analisados, permitindo que você identifique campos repetidos sem precisar recontar o objeto.
Entenda a decodificação e as chaves repetidas
Nomes e valores são decodificados separadamente segundo as convenções normalmente aplicadas a formulários em consultas de URL. Um sinal de adição vira espaço, enquanto sequências <code>%HH</code> são interpretadas como bytes UTF-8. Assim, <code>city=San+Jos%C3%A9</code> produz texto Unicode legível, e um separador codificado como <code>%26</code> permanece dentro de um único valor em vez de iniciar outro campo. A decodificação ocorre exatamente uma vez: <code>%2520</code> vira <code>%20</code>, não um espaço. Quando uma chave aparece uma vez, o valor é uma string. Se a mesma chave decodificada aparecer novamente, o valor vira uma lista que contém todas as ocorrências na ordem de origem. Essa regra representa grupos de caixas de seleção, filtros, tags e outros controles de seleção múltipla sem descartar informações nem inventar propriedades numeradas. A repetição é determinada após a decodificação; portanto, grafias codificadas equivalentes do mesmo nome são agrupadas. Valores vazios repetidos também são preservados. O analisador não infere booleanos, números ou datas e não interpreta a notação com colchetes como objetos aninhados. Todos os valores escalares continuam como strings para que o código seguinte aplique conscientemente sua própria conversão específica.
Interrompa dados corrompidos antes que entrem no fluxo
Analisadores permissivos podem manter um sinal de porcentagem isolado, aceitar um escape de apenas um dígito ou inserir um caractere substituto quando os bytes escapados não formam UTF-8 válido. Esses comportamentos fazem identificadores danificados parecerem utilizáveis e criam diferenças difíceis de explicar entre navegador, servidor e uma rotina de verificação de assinatura. Esta capacidade confere se cada sinal de porcentagem é seguido por exatamente dois dígitos hexadecimais e depois verifica se cada sequência de bytes decodificada representa UTF-8 válido. Se qualquer condição falhar, a solicitação retorna um erro de entrada inválida, não um objeto parcial. O analisador é puro e determinístico: não acessa a rede, não segue redirecionamentos, não consulta o relógio, não usa aleatoriedade e não guarda estado entre chamadas. Trate as strings retornadas como dados, não como HTML, código, caminhos de arquivo ou expressões de banco de dados confiáveis; decodificar recupera caracteres, mas não torna seguro o uso posterior. Em automações, a API custa US$ 0,002 por item e funciona como uma etapa estável de normalização antes de validar, encaminhar, comparar ou armazenar. No navegador, a mesma lógica permite examinar rapidamente links copiados sem contatar o destino.
Casos de uso
Examinar uma URL copiada
Transforme uma URL longa de pesquisa, campanha ou callback em campos legíveis sem abrir nem contatar o destino.
Normalizar a entrada de um webhook
Analise uma consulta bruta antes da validação específica do aplicativo e preserve todos os valores de parâmetros repetidos.
Criar dados de teste determinísticos
Confirme com exatidão a decodificação, os valores vazios e as chaves repetidas em testes de integração e ingestão.
Perguntas frequentes
Quanto custa uma solicitação pela API?
Cada item analisado custa US$ 0,002 pela API. A ferramenta interativa do navegador usa a mesma lógica determinística.
O que acontece quando uma chave aparece mais de uma vez?
Uma ocorrência produz uma string. Quando há repetição, o valor vira uma lista com todas as ocorrências na ordem original.
Os sinais de adição viram espaços?
Sim. Na codificação comum de formulários, o sinal de adição representa um espaço. Use %2B para manter um sinal de adição literal.
O analisador infere números ou booleanos?
Não. Todo valor escalar permanece como string, inclusive texto vazio, números e true ou false. Faça a conversão depois conforme o seu esquema.
Quais erros de codificação percentual são rejeitados?
São rejeitados sinais de porcentagem sem dois dígitos hexadecimais e sequências de bytes que não formam UTF-8 válido.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"text": "https://example.com/search?q=red+shoes&tag=sale&tag=new&empty="
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.query_string_parse",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
timeout_sec | 30 |
max_crawl_pages | 25 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |