Ferramentas · No ar
FacilHook
Uma URL que escuta, e você vê tudo chegar.
URL temporária de 1 hora que captura requisições HTTP e mostra cada uma ao vivo, com cabeçalhos, corpo e o cURL pronto. Feito para testar webhooks.
Sobre o projeto
O que é FacilHook
O FacilHook cria uma URL temporária. Qualquer requisição que chegar nela, de qualquer método e com qualquer corpo, aparece na tela na hora, com cabeçalhos, corpo e o cURL que reproduz o pedido. É feito para quem testa webhook: você cola a URL no serviço que envia e vê o que ele manda de verdade, sem montar servidor nenhum.
A URL dura 1 hora e depois some. Os pedidos ficam só na memória do servidor, nunca em disco, e quem tem a URL pode enviar, mas só quem criou (com uma chave de leitura guardada no navegador) consegue ler. As URLs que você cria ficam num histórico no seu navegador, com o tempo que falta para cada uma.
Dá para escolher o que a URL responde (status, corpo, tipo e atraso) para ver como o serviço que envia reage a um erro ou a uma resposta lenta. Tudo o que a tela faz também existe numa API aberta, documentada em OpenAPI e com limites por IP.
Recursos
O que o FacilHook faz
Ao vivo, sem recarregar
Cada requisição aparece na hora, por Server-Sent Events. Se a conexão cair, a tela reconecta e recebe só o que faltou; se o navegador não conseguir ler o fluxo, ela passa a perguntar a cada poucos segundos.
cURL pronto
Um cURL de teste para colar no terminal (bash ou PowerShell) e o botão Enviar do navegador. Cada requisição recebida também vira um cURL que a reproduz no seu servidor local.
Tudo da requisição
Método, caminho e query como chegaram, cabeçalhos com a caixa original, corpo em JSON bonito, formulário, texto cru ou hexadecimal, a resposta que o FacilHook devolveu a cada pedido (status, cabeçalhos e corpo, numa aba própria) e busca em tudo o que chegou.
Dura 1 hora
A URL some sozinha depois de uma hora, com a contagem regressiva na tela. Cada URL criada fica no histórico do seu navegador, com o tempo que falta.
Só quem criou lê
A URL de captura só recebe. Ler o que chegou exige uma chave que fica no seu navegador e vai só em cabeçalho, nunca na URL.
Resposta sob medida
Escolha o status (200, 500, 429…), o corpo, o tipo e um atraso de até 5 segundos para ver como o serviço que envia reage a um erro ou a uma resposta lenta.
Só na memória
Os pedidos nunca vão para o disco e somem com a URL. Cada gancho guarda as últimas 100 requisições, com até 256 KB de corpo em cada uma.
API aberta
Criar, ler, mudar a resposta, esvaziar, apagar e ouvir ao vivo: a tela usa a mesma API, documentada em OpenAPI 3.1 e com limites por IP.
Tecnologias
Por dentro do FacilHook
SSE lido com fetch
O fluxo ao vivo é lido com fetch e um leitor próprio do formato text/event-stream, e não com EventSource, porque a chave de leitura só pode ir em cabeçalho. Reconecta com recuo e Last-Event-ID e cai para polling se o navegador não ler o fluxo.
Duas chaves
Um id público de 80 bits para capturar e uma chave de leitura de 144 bits, da qual o servidor guarda só o hash, comparado em tempo constante. Cinco chaves erradas em 15 minutos travam o IP.
Memória com teto
Os ganchos moram num Map no processo: no máximo 5.000 no ar, 4 MB de corpos por gancho e 128 MB no total, descartando o mais antigo. O corpo é lido cru, com teto de 1 MB e 20 segundos para chegar.
Resposta endurecida
A resposta configurada nunca é HTML, não redireciona e sai com CSP sandbox, nosniff e no-store, porque vem do domínio do site.
cURL provado de verdade
O quoting do cURL (bash e PowerShell) é testado executando o comando contra um servidor e comparando o pedido que chega com o original, com aspas, acentos, binário e cabeçalhos vazios.
Módulos puros
Esquema, cURL, corpo, histórico, leitor SSE e a conexão ao vivo não tocam em tela e rodam igual no Node, onde são testados com cortes de conexão de verdade.
JSON bonito sem mexer nos números
O JSON é reindentado sem reler os valores: 12345678901234567890 continua 12345678901234567890 (JSON.stringify(JSON.parse()) mudaria o número).
API
Endpoints
Sem cadastro: criar um gancho devolve a URL de captura e uma chave de leitura que só aparece uma vez. A chave vai só em cabeçalho (X-Hook-Key ou Authorization: Bearer), nunca na URL. Limites por IP: 3 ganchos por minuto e 20 por hora; erros em JSON com código estável e cabeçalhos RateLimit-*.
/h/<id>
A URL de captura: aceita qualquer método e qualquer caminho depois do id, e devolve a resposta configurada.
/projetos/facilhook/api/hooks
Cria um gancho de uma hora e devolve a URL de captura, a chave de leitura e um cURL pronto.
/projetos/facilhook/api/hooks/<id>
Metadados do gancho: validade, resposta configurada e contadores.
/projetos/facilhook/api/hooks/<id>
Muda o nome e a resposta que a URL devolve (status, corpo, tipo e atraso).
/projetos/facilhook/api/hooks/<id>
Apaga o gancho e tudo o que ele guardou, na hora.
/projetos/facilhook/api/hooks/<id>/requests
Lista as requisições capturadas (use after=<seq> para só as novas).
/projetos/facilhook/api/hooks/<id>/requests
Esvazia a lista de requisições capturadas, sem apagar o gancho.
/projetos/facilhook/api/hooks/<id>/events
Fluxo ao vivo (Server-Sent Events): cada requisição aparece quando chega.
/projetos/facilhook/api/openapi.json
Esta especificação (OpenAPI 3.1), gerada do esquema.
FAQ
Perguntas frequentes
Quanto tempo a URL dura?
Uma hora a partir da criação, sem renovar. Depois a URL passa a responder 404 e tudo o que ela guardou é apagado. A tela mostra a contagem regressiva.
Onde ficam as requisições que chegam?
Só na memória do servidor, nunca em disco, e somem com a URL ou se o servidor reiniciar. No seu navegador fica só o histórico das URLs (o endereço, o nome e a chave de leitura), nunca o que chegou.
Quem consegue ver o que chegou?
Só quem tem a chave de leitura, que o servidor entrega uma única vez, ao criar, e que a tela guarda no seu navegador. Quem tem só a URL de captura (o serviço que envia o webhook, por exemplo) consegue enviar, mas não ler.
Posso usar com dados reais?
Não é recomendado: segredos de webhook, tokens e dados pessoais não devem ir para uma ferramenta de teste pública. Use dados de teste.
Quais são os limites?
Cada gancho guarda as últimas 100 requisições, com até 256 KB de corpo em cada uma (acima de 1 MB o pedido é recusado, mas fica registrado) e aceita 120 pedidos por minuto. Cada IP cria até 3 ganchos por minuto e 20 por hora. O que passa do limite recebe 429 e aparece na tela como "barrada por limite".
O que a URL responde?
Por padrão, 200 com o texto "ok". Você pode escolher outro status (de uma lista que vai de 200 a 503), o corpo (até 2 KB, em texto, JSON ou XML, nunca HTML) e um atraso de até 5 segundos, para ver como o serviço que envia trata um erro ou uma resposta lenta. Cada requisição guarda a resposta que recebeu, numa aba própria (Resposta), mesmo que você mude a resposta do gancho depois.
Como funciona o cURL?
O cURL de teste manda um POST de JSON na URL. Para cada requisição recebida há um cURL que a reproduz (por padrão no seu servidor local), em bash ou PowerShell, com os cabeçalhos e o corpo como chegaram. Cabeçalhos que um proxy acrescenta (x-forwarded-*, cf-*) ficam de fora, a menos que você peça. Corpo com acento ou binário vai em base64, para o curl enviar os bytes exatos.
E o pré-voo do CORS (OPTIONS)?
A URL aceita CORS aberto, então testes feitos de dentro de uma página funcionam. O OPTIONS de pré-voo é registrado e marcado, e fica oculto na lista por padrão (um botão o mostra).
Tem API?
Tem, e é a mesma que a tela usa: criar, ler, mudar a resposta, esvaziar, apagar e ouvir ao vivo, com OpenAPI 3.1 e os cabeçalhos RateLimit-*.
O que o servidor conta?
Só contagens anônimas: ganchos criados, requisições capturadas e barradas, cURL copiados e testes enviados pelo navegador. Nunca a URL, o conteúdo nem quem enviou, e nada com Não rastrear ligado.
Gostou do FacilHook? Dá para apoiar o trabalho: Me pague um café
Continue explorando
Veja também
Mercado Helper
Listas de compras para usar no celular: adicione vários itens de uma vez, marque com um toque e, se quiser, informe preço e quantidade para ver o total.
Ver projeto No arShareSoFast
Compartilhe um arquivo de até 25 MB por um link curto, com senha e uma carta opcional. Depois de 1 dia, tudo é apagado de verdade.
Ver projeto No arRec2Link
Grave a tela, o áudio, os dois ou só a webcam direto no navegador. O arquivo é comprimido aí mesmo, ganha um link curto e é apagado sozinho em 24 horas.
Ver projeto