ToolDeck

Analisador de URL

Analise uma URL nos seus componentes — protocolo, host, caminho, parâmetros de consulta, hash

Experimente um exemplo

O que é análise de URL?

Análise de URL é o processo de decompor um Localizador Uniforme de Recursos nos seus componentes individuais: protocolo (scheme), hostname, porta, caminho, parâmetros de consulta e identificador de fragmento. Toda URL segue uma estrutura definida pelo RFC 3986 e pelo WHATWG URL Standard. Um analisador de URL lê a string bruta, identifica cada segmento pelos seus caracteres delimitadores (://, :, /, ?, #, &, =) e os retorna como campos separados e acessíveis.

Os navegadores realizam análise de URL toda vez que você digita um endereço ou clica em um link. O construtor URL do JavaScript, o módulo urllib.parse do Python e o pacote net/url do Go implementam analisadores que seguem as mesmas regras estruturais. Analisar uma URL é o inverso da codificação de URL: em vez de transformar caracteres para transporte seguro, você decompõe uma URL já formada nas partes que a compõem.

Uma URL típica como https://api.example.com:8080/v1/users?page=2&limit=10#section contém seis componentes distintos. Os caracteres delimitadores — ://, :, /, ?, &, = e # — são o que torna a análise determinística: cada um sinaliza um limite e permite ao analisador extrair campos sem ambiguidade.

Por que usar um analisador de URL online?

Dividir uma URL manualmente é sujeito a erros, especialmente quando a string contém caracteres codificados, múltiplos parâmetros de consulta ou portas não padrão. Esta ferramenta analisa a URL usando o mesmo algoritmo compatível com WHATWG que os navegadores utilizam e exibe cada componente em uma tabela clara e copiável.

Analise instantaneamente no navegador
Cole qualquer URL e veja todos os componentes detalhados imediatamente. Sem recarregamento de página, sem chamada ao servidor, sem espera.
🔒
Mantenha suas URLs privadas
A análise ocorre inteiramente no seu navegador usando a API URL nativa. A URL que você insere nunca sai da sua máquina.
🔍
Inspecione cada detalhe
Veja protocolo, hostname, porta, caminho, string de consulta, hash e cada parâmetro de consulta individual com seu valor decodificado.
📋
Copie componentes individuais
Clique no botão copiar ao lado de qualquer campo para obter o valor exato. Não é necessário selecionar e recortar substrings manualmente.

Casos de uso do analisador de URL

Depuração de roteamento frontend
Verifique se os segmentos de caminho e fragmentos hash correspondem à configuração do seu roteador. Identifique barras mal posicionadas ou parâmetros de consulta inesperados antes que causem erros 404.
Validação de endpoints de API backend
Confirme que as URLs de requisição recebidas contêm o hostname, porta e estrutura de caminho corretos antes de escrever manipuladores de rota ou middleware.
Teste de regras de redirecionamento DevOps
Ao escrever regras de redirecionamento para Nginx, Apache ou CDN, analise as URLs de origem e destino para confirmar que cada componente é mapeado corretamente.
Verificação de links em QA
Analise URLs de relatórios de teste ou tickets de bug para isolar qual parâmetro de consulta ou fragmento está causando o carregamento da página errada.
Extração de URL em pipelines de dados
Extraia hostnames ou segmentos de caminho de URLs em arquivos de log ou dados de analytics para construir relatórios por domínio ou filtrar tráfego por endpoint.
Aprendendo a estrutura de URL
Estudantes e desenvolvedores iniciantes em protocolos web podem colar URLs reais e ver imediatamente qual delimitador marca qual limite.

Referência de componentes de URL

A tabela abaixo mostra cada propriedade retornada pelo construtor URL do JavaScript ao analisar uma URL. Os mesmos componentes existem no resultado de urlparse do Python, na struct url.URL do Go e na saída de parse_url do PHP, embora os nomes das propriedades difiram entre linguagens.

PropriedadeExemploDescrição
protocolhttps:Scheme including the trailing colon
hostnameapi.example.comDomain name or IP address
port8080Port number (empty string if default)
pathname/v1/usersPath starting with /
search?page=2&limit=10Query string including the leading ?
hash#sectionFragment identifier including the leading #
originhttps://api.example.com:8080protocol + hostname + port
hostapi.example.com:8080hostname + port
usernameadminCredentials before @ (rarely used in practice)
passwordsecretCredentials before @ (avoid in production URLs)
href(full URL)The complete, serialized URL string

WHATWG URL Standard vs RFC 3986

Duas especificações definem como as URLs devem ser analisadas. Elas concordam na estrutura básica, mas divergem em casos extremos — e essa divergência é geralmente a causa quando seu navegador trata uma URL de forma diferente do seu servidor.

WHATWG URL Standard
Usado por todos os navegadores modernos e pelo construtor URL do JavaScript. Aceita e normaliza entradas imprecisas: schemes ausentes, barras invertidas como separadores de caminho, hostnames internacionais via Punycode. Definido como padrão vivo em url.spec.whatwg.org.
RFC 3986
A especificação formal da IETF (2005). Mais restrita que o WHATWG: rejeita algumas entradas que os navegadores aceitam. Usada por muitas bibliotecas do lado do servidor, incluindo net/url do Go e urllib.parse do Python. Definida no RFC 3986.

Na prática, a maioria das diferenças aparece ao analisar URLs com nomes de domínio internacionais (IDN), schemes ausentes ou caracteres incomuns. O analisador WHATWG converte hostnames IDN para Punycode automaticamente, enquanto analisadores estritos do RFC 3986 podem rejeitá-los. Se você colar uma URL nesta ferramenta e ver resultados diferentes dos que seu código no servidor produz, a diferença entre WHATWG e RFC é a causa mais provável.

Exemplos de código

Toda linguagem popular tem um analisador de URL integrado. Os exemplos abaixo analisam a mesma URL e extraem seus componentes. Observe as pequenas diferenças de nomenclatura entre linguagens: Python usa scheme em vez de protocol, e Go expõe RawQuery em vez de search.

JavaScript (browser / Node.js)
const url = new URL('https://api.example.com:8080/v1/users?page=2&limit=10#section')

url.protocol  // → "https:"
url.hostname  // → "api.example.com"
url.port      // → "8080"
url.pathname  // → "/v1/users"
url.search    // → "?page=2&limit=10"
url.hash      // → "#section"

// Iterate over query parameters
for (const [key, value] of url.searchParams) {
  console.log(`${key} = ${value}`)
}
// → "page = 2"
// → "limit = 10"

// Modify and re-serialize
url.searchParams.set('page', '3')
url.toString()
// → "https://api.example.com:8080/v1/users?page=3&limit=10#section"
Python
from urllib.parse import urlparse, parse_qs

result = urlparse('https://api.example.com:8080/v1/users?page=2&limit=10#section')

result.scheme    # → 'https'
result.hostname  # → 'api.example.com'
result.port      # → 8080
result.path      # → '/v1/users'
result.query     # → 'page=2&limit=10'
result.fragment  # → 'section'

# Parse query string into a dict
params = parse_qs(result.query)
params['page']   # → ['2']
params['limit']  # → ['10']

# Reconstruct with modifications
from urllib.parse import urlencode, urlunparse
new_query = urlencode({'page': '3', 'limit': '10'})
urlunparse(result._replace(query=new_query))
# → 'https://api.example.com:8080/v1/users?page=3&limit=10#section'
Go
package main

import (
	"fmt"
	"net/url"
)

func main() {
	u, err := url.Parse("https://api.example.com:8080/v1/users?page=2&limit=10#section")
	if err != nil {
		panic(err)
	}

	fmt.Println(u.Scheme)   // → "https"
	fmt.Println(u.Hostname()) // → "api.example.com"
	fmt.Println(u.Port())     // → "8080"
	fmt.Println(u.Path)       // → "/v1/users"
	fmt.Println(u.RawQuery)   // → "page=2&limit=10"
	fmt.Println(u.Fragment)   // → "section"

	// Query params as map
	q := u.Query()
	fmt.Println(q.Get("page"))  // → "2"
	fmt.Println(q.Get("limit")) // → "10"
}
PHP
<?php
$url = 'https://api.example.com:8080/v1/users?page=2&limit=10#section';
$parts = parse_url($url);

$parts['scheme'];   // → "https"
$parts['host'];     // → "api.example.com"
$parts['port'];     // → 8080
$parts['path'];     // → "/v1/users"
$parts['query'];    // → "page=2&limit=10"
$parts['fragment']; // → "section"

// Parse query string into an array
parse_str($parts['query'], $params);
$params['page'];    // → "2"
$params['limit'];   // → "10"

Perguntas frequentes

Qual é a diferença entre URL e URI?
Uma URL (Localizador Uniforme de Recursos) é um tipo específico de URI (Identificador Uniforme de Recursos) que inclui tanto o identificador quanto o mecanismo de acesso (o scheme, como https://). Toda URL é uma URI, mas nem toda URI é uma URL. Uma URN como urn:isbn:0451450523 é uma URI que identifica um recurso pelo nome sem especificar como recuperá-lo. No desenvolvimento web, os termos são frequentemente usados de forma intercambiável porque quase toda URI encontrada é uma URL.
Como o construtor URL lida com URLs relativas?
O construtor URL do JavaScript requer uma URL base ao analisar caminhos relativos. Chamar new URL('/path?q=1') lança um TypeError. É necessário fornecer uma base: new URL('/path?q=1', 'https://example.com'). O urljoin do Python e url.ResolveReference do Go servem ao mesmo propósito. Esta ferramenta espera URLs completas e absolutas com um scheme.
O que acontece quando uma URL não tem número de porta?
Quando a porta é omitida, o analisador retorna uma string vazia para a propriedade port. O navegador assume a porta padrão para o scheme: 443 para https, 80 para http, 21 para ftp. Você pode acessar a porta efetiva pela propriedade origin ou host, mas o campo port permanece vazio porque nenhuma porta explícita foi especificada.
Uma URL pode conter caracteres Unicode?
Sim, mas eles devem ser codificados para transmissão. O WHATWG URL Standard trata isso automaticamente: nomes de domínio internacionais são convertidos para Punycode (prefixo xn--), e caracteres de caminho e consulta fora do intervalo ASCII são codificados com percent-encoding. Se você colar uma URL com Unicode nesta ferramenta, verá a versão normalizada e segura para ASCII na saída analisada.
Qual é o tamanho máximo de uma URL?
Nenhum padrão define um tamanho máximo de URL — o RFC 3986 não trata do assunto. Na prática, os navegadores impõem limites: o Chrome suporta até aproximadamente 2 MB na barra de endereços, enquanto o Internet Explorer (legado) tinha um limite de 2.083 caracteres. A maioria dos servidores web tem padrão de 8 KB (Nginx) ou 8 KB (Apache) para a linha de requisição. Se precisar transmitir dados grandes, use corpos de requisição POST em vez de strings de consulta.
Como analisar apenas a string de consulta sem a URL completa?
Em JavaScript, use new URLSearchParams('page=2&limit=10') para analisar uma string de consulta isolada. Em Python, use urllib.parse.parse_qs('page=2&limit=10'). Ambos retornam os parâmetros como pares chave-valor. Isso é útil quando você tem a string de consulta isolada, por exemplo, de um envio de formulário ou uma entrada de log que capturou apenas a parte de consulta.
Análise de URL é o mesmo que decodificação de URL?
Não. A análise de URL divide uma URL em componentes estruturais (scheme, host, caminho, consulta, fragmento). A decodificação de URL converte caracteres codificados com percent-encoding de volta à sua forma original (%20 vira espaço, %26 vira &). As duas operações são complementares: normalmente você analisa a URL primeiro e depois decodifica os valores de componentes individuais. Decodificar antes de analisar pode quebrar a estrutura da URL porque delimitadores decodificados como & e = seriam interpretados incorretamente.