🧰 ToolPicoTodas as ferramentas →

InícioBlog › API a devolver erro 400 por causa de um parâmetro?

API a devolver erro 400 por causa de um parâmetro? 5 erros comuns de codificação URL

Se trabalhas com chamadas fetch, integrações de API ou formulários que constroem URLs dinamicamente, já deves ter visto um pedido falhar sem motivo aparente. Na maioria das vezes, a causa é um destes 5 erros de codificação URL — todos fáceis de diagnosticar com o codificador/descodificador da ToolPico antes de voltares a enviar o pedido.

Índice

Erro 1: interpolar strings sem encodeURIComponent

Resposta curtaConstruir um URL com template strings (`/pesquisa?q=${termo}`) sem passar `termo` por encodeURIComponent() é a causa mais frequente de pedidos que falham silenciosamente ou devolvem erro 400.

Um cenário hipotético comum: um programador júnior está a construir uma chamada a uma API de pesquisa e escreve algo como fetch(`/api/produtos?nome=${nomeProduto}`). Enquanto testa com valores simples como "mesa", tudo funciona. Assim que um utilizador pesquisa "mesa & cadeira" ou "sofá de 2 lugares", o & ou o acento partem a query string, e o servidor recebe um parâmetro truncado ou mal formado — o erro 400 aparece sem explicação óbvia no código.

O diagnóstico é rápido: cola o valor suspeito (ex.: sofá de 2 lugares) no separador "Codificar" desta ferramenta, escolhe o modo Componente, e compara o resultado com o que o teu código está realmente a enviar. Se forem diferentes, encontraste o problema — falta aplicar encodeURIComponent() a cada valor antes de o inserires no template da URL.

Erro 2: codificar duas vezes o mesmo valor

Resposta curtaQuando um valor já vem codificado (por exemplo, de um formulário ou de outro serviço) e o teu código o codifica outra vez, o resultado é uma dupla codificação como %2520 em vez de %20 — e o servidor de destino recebe um valor ilegível.

Isto acontece com frequência em arquiteturas com várias camadas: um frontend codifica um parâmetro antes de o enviar a um serviço intermédio, e esse serviço, sem saber que o valor já estava codificado, aplica encodeURIComponent outra vez antes de o reencaminhar. O carácter % em si é codificado como %25, por isso um %20 vira %2520.

Como diagnosticar: cola o valor recebido no separador "Descodificar" com a opção "descodificação multinível" ativada. Se o texto resultante ainda contiver símbolos %XX depois de uma primeira descodificação, é sinal de dupla (ou tripla) codificação — a opção multinível resolve todas as camadas de uma vez, para veres imediatamente o texto original.
Estado do valor (exemplo)O que apareceDiagnóstico
Codificado 1xtenis%20de%20corridaNormal — descodifica para texto legível
Codificado 2xtenis%2520de%2520corridaDupla codificação — usar modo multinível
Não codificadotenis de corridaFalta aplicar encodeURIComponent antes de enviar

Erro 3: tratar Base64 como se já fosse seguro para URL

Resposta curtaUma cadeia Base64 pode conter os caracteres + e /, que têm significado próprio num URL — colocá-la diretamente num parâmetro sem aplicar depois encodeURIComponent arrisca corromper o valor no servidor de destino.

Um caso hipotético frequente: um token de autenticação ou um pequeno payload é gerado em Base64 e colocado diretamente como parâmetro de query, por exemplo ?token=abc+def/xyz==. Alguns servidores interpretam o + como espaço e o resultado é um token inválido do lado do servidor, mesmo que o Base64 original estivesse perfeitamente correto.

A prática recomendada, e o que esta ferramenta permite verificar diretamente no separador Base64: gera primeiro a cadeia Base64, depois aplica encodeURIComponent ao resultado antes de o colocares num link ou numa query string. Isto garante que o + vira %2B e o / vira %2F, preservando o valor exato até chegar ao destino.

Erro 4 e 5: query strings mal montadas e links não verificados antes de partilhar

Dois erros adicionais, mais frequentes em equipas com vários programadores ou em revisões de código apressadas:

  • Concatenar parâmetros manualmente com "&" e "=". Escrever url + "?a=" + valorA + "&b=" + valorB à mão é propenso a erro — falta um &, ou um valor com espaço não é codificado. No separador "Construir Query", introduz-se cada par chave-valor num campo próprio e a ferramenta trata da codificação e da junção automaticamente, tanto para gerar apenas a query string como um URL completo.
  • Partilhar um link sem verificar o que ele realmente contém. Antes de enviares um URL longo a um colega ou cliente — por exemplo, copiado de uma barra de endereços depois de várias redireções — cola-o no separador "Analisar URL" para veres o protocolo, o anfitrião, o caminho, a query e o fragmento decompostos, e no separador "Analisar Query" para veres cada parâmetro, com os de tracking assinalados.
Nota: os exemplos de código e de valores usados neste artigo (nomes de produtos, tokens, parâmetros) são hipotéticos e servem apenas para ilustrar padrões de erro comuns — não representam dados reais de nenhuma aplicação ou utilizador.

Testa o teu parâmetro, token ou URL suspeito nos 6 modos da ferramenta — tudo processado no teu navegador, nada é enviado para um servidor.

Experimentar a ferramenta →

Perguntas frequentes

Porque é que a minha chamada fetch/API devolve erro 400 com certos parâmetros?
O erro mais frequente é enviar um parâmetro por interpolação direta de string (ex.: /pesquisa?q=${termo}) sem passar o valor por encodeURIComponent primeiro. Se o termo contiver espaços, &, # ou acentos, o servidor recebe um URL malformado ou corta o parâmetro a meio, o que muitas APIs devolvem como erro 400 (Bad Request). Testa o valor no separador Codificar desta ferramenta antes de o colocares na chamada.
Como sei se um parâmetro já está codificado, para não o codificar outra vez?
Um sinal claro é a presença de sequências %XX no texto (ex.: %20, %C3%A9) — se já vês isso, o valor provavelmente já está codificado. Cola-o no separador Descodificar: se o resultado for texto legível sem símbolos % residuais, estava corretamente codificado uma vez. Se depois de descodificar ainda restarem %XX (por exemplo %2520), estava codificado duas vezes e precisas da opção de descodificação multinível.
Qual é o erro mais comum ao misturar Base64 com parâmetros de URL?
Colocar uma cadeia Base64 diretamente num parâmetro de URL sem a codificar depois. O alfabeto Base64 padrão inclui os caracteres + e /, que têm significado especial num URL (+ pode ser interpretado como espaço, / como separador de caminho). A prática correta é gerar o Base64 primeiro e depois aplicar encodeURIComponent ao resultado antes de o colocar num link ou parâmetro de query.
Como testar rapidamente um URL suspeito antes de o enviar a um colega ou cliente?
Cola o URL completo no separador Analisar URL para ver de imediato o protocolo, o anfitrião, o caminho, a query e o fragmento separados. Depois cola a mesma query no separador Analisar Query para veres cada parâmetro já descodificado numa tabela, com os parâmetros de tracking assinalados — isto revela em segundos se o link está bem formado e o que realmente contém.
Vale a pena codificar parâmetros um a um manualmente em projetos com muitos links?
Não costuma compensar quando há dezenas de valores a rever. O separador Massa processa um texto ou URL por linha de cada vez, aplicando a mesma operação (encodeURIComponent, encodeURI ou descodificar) a todas as linhas e devolvendo os resultados na mesma ordem — útil para rever ou preparar lotes de parâmetros antes de os integrar num script ou numa folha de cálculo.
Nota: este artigo tem carácter informativo e educativo sobre normas técnicas de codificação de URL e boas práticas de programação (UTF-8, RFC 3986). Os exemplos de código, valores e cenários descritos são hipotéticos/ilustrativos e não representam dados reais de nenhuma aplicação, API ou utilizador. Para casos de uso críticos, consulta sempre a documentação oficial da tua plataforma ou norma.