Web scraping com n8n: HTTP Request e ajustes de proxy

Publicado:

21 min de leitura

Acar Diveroli
Autor: Acar Diveroli
Sobre linhas de IP apagadas, moldura de cantos em cruz com o logotipo da Proxynet, um X, o do n8n e INTEGRATION

O fluxo de trabalho que você montou no n8n abre dez páginas de produto toda manhã e grava os preços em uma planilha. Na primeira semana não há problema. Depois a lista sobe para duzentos produtos, o fluxo passa a enviar requisições em sequência a partir do único endereço IP do seu servidor e o nó HTTP Request fica vermelho: primeiro 429, depois 403. Ou o caso oposto: a API de destino mostra o preço correto só para requisições vindas de um país específico, e o seu servidor n8n está em outro. Nos dois casos o ajuste procurado é o mesmo: fazer as requisições de saída do n8n passarem por um proxy.

Neste artigo explicamos os dois lugares em que um proxy é definido no n8n: a opção Proxy do nó HTTP Request e as variáveis de ambiente de uma instalação self-hosted. Vemos, em ordem, como as credenciais são escritas no endereço, qual ajuste prevalece sobre qual, a diferença entre o n8n Cloud e o seu próprio servidor e os erros mais comuns. Também separamos o assunto do proxy reverso (reverse proxy), que é o que parte das pessoas que buscam "n8n proxy" realmente procura. O fluxo de exemplo acompanha preços em um site publicado para treino.

O que é o n8n e onde ele entra no scraping?

O n8n é uma ferramenta de automação em que você monta fluxos de trabalho ligando caixas (nós, "nodes" em inglês) com linhas. Um nó de gatilho inicia o fluxo (agendador, webhook, formulário), e os nós seguintes buscam os dados, transformam e gravam em algum lugar. Você pode usar a ferramenta na nuvem do próprio n8n (n8n Cloud) ou instalar no seu servidor (self-hosted). Essa distinção é decisiva no assunto proxy.

No scraping, dois nós fazem o trabalho. O nó HTTP Request envia uma requisição a um endereço e recebe a resposta; o nó HTML extrai dessa resposta os campos que você quer, com seletores CSS. Essa dupla funciona bem em páginas cujo conteúdo já vem pronto do servidor e em APIs que retornam JSON. Em páginas cujo conteúdo é montado no navegador com JavaScript, o HTTP Request enxerga só um esqueleto vazio; explicamos a diferença em Páginas estáticas e dinâmicas. Para escrever seletores, veja Seletor CSS ou XPath.

O ponto forte do n8n é o que se faz com os dados depois: gravar na planilha, comparar com o valor anterior, avisar quando há mudança. Ele não é a ferramenta certa para uma varredura de milhares de páginas; nessa escala é preciso um framework como o Scrapy ou uma infraestrutura de extração de dados. Em Como extrair dados de um site comparamos qual método basta em cada caso.

"n8n proxy" são dois assuntos diferentes: qual você procura?

Nas sugestões de busca, ao lado de "n8n proxy" aparecem também as palavras proxy hops, nginx e reverse. Elas não têm relação com o ajuste tratado neste artigo:

Proxy direto (forward proxy)Proxy reverso (reverse proxy)
Sentido do tráfegoRequisições que saem do n8nRequisições que chegam ao n8n
Para que serveDefine o endereço IP e o país de onde a requisição saiPublica o n8n com domínio e HTTPS
Ferramenta típicaO endpoint do provedor de proxynginx, Caddy, Traefik
Ajuste no n8nHTTP Request → Proxy, HTTP_PROXY, HTTPS_PROXYN8N_PROXY_HOPS, variável da URL do webhook
Sintoma407, ECONNREFUSED, 403 / 429 no site de destinoURL do webhook aparecendo como localhost, IP do cliente errado

Se você roda o n8n atrás do nginx, a página da documentação do n8n sobre a configuração da URL do webhook atrás de um proxy reverso pede duas coisas: definir N8N_PROXY_HOPS como 1 (o padrão é 0, e a variável informa quantos proxies reversos há na frente do n8n) e fazer o último proxy da cadeia repassar os cabeçalhos X-Forwarded-For, X-Forwarded-Host e X-Forwarded-Proto. Esses ajustes não afetam em nada as suas requisições de saída. A diferença entre os dois conceitos e um exemplo com nginx estão em Forward proxy e reverse proxy. O restante do artigo trata do proxy direto.

Como definir o proxy no nó HTTP Request?

O ajuste não fica entre os campos principais do nó, e sim na seção Options, bem no final; por isso ele não aparece à primeira vista.

  1. Abra o nó HTTP Request no seu fluxo e preencha os campos Method e URL.
  2. Na seção Options, no final dos parâmetros, clique em Add option.
  3. Adicione a opção Proxy da lista.
  4. No campo que aparece, escreva o endereço do proxy com o esquema: http://user:pass@pr.proxynet.io:8000
  5. Execute o nó sozinho com Execute step e confira a saída.

O texto de exemplo do campo é e.g. http://myproxy:3128; ou seja, o n8n espera aqui uma URL completa. Na versão atual que instalamos localmente para este artigo, um endereço escrito sem esquema (user:pass@pr.proxynet.io:8000) não gerou erro: a requisição saiu direto, sem passar pelo proxy. Com um endereço começando por socks5:// o resultado foi o mesmo: o campo é para proxy HTTP. A documentação do nó HTTP Request diz claramente que essa opção tem prioridade sobre o ajuste global feito com HTTP_PROXY, HTTPS_PROXY e ALL_PROXY. Assim, mesmo com um proxy corporativo definido no servidor, você consegue fazer um único nó sair por outro endpoint.

Onde ficam o usuário e a senha?

O nó não tem um campo separado de usuário ou senha para o proxy. As credenciais vão dentro do endereço, no formato usuario:senha@. A seção Authentication do nó vai para o site de destino, não para o proxy; escrever a senha do proxy ali não resolve um 407.

Se a sua senha tiver caracteres como @, :, / ou #, o endereço é dividido no lugar errado. Escreva esses caracteres com codificação percentual: %40 no lugar de @, %3A no lugar de :. No nosso teste local, a senha pa@ss:1 escrita como pa%40ss%3A1 foi interpretada corretamente no proxy. O detalhe dos dois métodos de autenticação está em Autenticação de proxy: user:pass ou whitelist de IP.

Uma nota de segurança: o campo Proxy é texto puro e não entra no cofre criptografado de credenciais do n8n (Credentials). Quando você exporta o fluxo como JSON e compartilha, a senha do proxy vai junto dentro do arquivo; limpe o campo antes de compartilhar.

Dá para usar whitelist de IP no n8n?

Para um n8n no seu próprio servidor com endereço IP fixo, sim: você adiciona o IP do servidor à lista de permitidos no painel do proxy, e o endereço é escrito sem senha, http://pr.proxynet.io:8000. No n8n Cloud esse método não é confiável. Na página da documentação sobre os endereços IP do Cloud, o n8n diz que os IPs de saída não são fixos e podem mudar sem aviso. O endereço que você libera hoje pode deixar de valer amanhã. No Cloud, conecte-se com usuário e senha.

Como usar variáveis de ambiente em uma instalação self-hosted?

Em vez de escrever o proxy nó por nó, você pode definir um para todo o processo do n8n. A página de variáveis de ambiente de deploy do n8n lista quatro variáveis:

VariávelFunção
HTTP_PROXYO tráfego HTTP sem criptografia que sai dos nós passa por este endereço
HTTPS_PROXYO tráfego com TLS (HTTPS) que sai dos nós passa por este endereço
ALL_PROXYVale para os dois quando as duas variáveis mais específicas não estão definidas
NO_PROXYLista separada por vírgulas de hosts acessados diretamente, sem proxy

Em uma instalação com Docker Compose, as variáveis entram na seção environment do serviço:

yaml
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    environment:
      - HTTP_PROXY=http://user:pass@pr.proxynet.io:8000
      - HTTPS_PROXY=http://user:pass@pr.proxynet.io:8000
      - NO_PROXY=localhost,127.0.0.1,postgres,redis

O valor de HTTPS_PROXY começar com http:// não é erro de digitação: o nome da variável não indica o esquema do proxy, e sim qual tráfego vai para ele. Em Uso de proxy com o wget explicamos como essas variáveis são definidas no sistema operacional; aqui tratamos só de três armadilhas próprias do n8n.

A variável em minúsculas se sobrepõe à maiúscula. A mesma página da documentação avisa que, no pacote proxy-from-env usado pelo n8n, nomes em minúsculas como http_proxy têm prioridade sobre os maiúsculos quando os dois estão definidos. Se outra pessoa colocou uma variável em minúsculas na sua imagem Docker ou no servidor, o seu valor de HTTP_PROXY é ignorado em silêncio. Dentro do contêiner, confira as duas com env | grep -i proxy.

Não deixe a lista NO_PROXY vazia. Se o n8n também conversa por HTTP com o banco de dados da mesma rede, com o Redis ou com uma API interna, essas requisições também vão para o proxy e muito provavelmente travam ali. Inclua na lista os nomes de host internos e localhost.

Nem todo nó respeita essas variáveis. Os nós que usam o auxiliar HTTP do próprio n8n enxergam o ajuste. Em alguns nós que trazem a própria biblioteca cliente há registros informando que a variável não é considerada (por exemplo, a issue #19652 do repositório do n8n foi aberta em 2025 para o nó RSS Read e fechada depois). Antes de colocar um nó crítico em produção, teste com o passo de verificação mais abaixo.

As variáveis são lidas quando o processo do n8n inicia; depois de alterá-las, é preciso reiniciar o contêiner ou o serviço.

n8n Cloud e self-hosted: qual caminho está aberto em cada um?

n8n CloudSelf-hosted (Docker, npm)
HTTP Request → opção ProxyDisponívelDisponível
HTTP_PROXY / HTTPS_PROXYNão dá para definir, porque o ambiente do servidor não é seuDefinidas, afetam todo o processo
Proxy com whitelist de IPNão recomendado: os IPs de saída mudam sem avisoFunciona em servidor com IP fixo
IP de saída sem proxyEndereços variáveis da infraestrutura em nuvem do n8nO endereço do seu próprio servidor

Se você usa o Cloud, o único caminho é a opção do nó. Em uma instalação self-hosted os dois estão abertos; pense na variável de ambiente como a "saída padrão" e na opção do nó como "esta requisição sai por outro lugar".

Fluxo de exemplo: acompanhar o preço de um produto

Montamos o exemplo sobre o books.toscrape.com, um site publicado para treino de scraping. No seu trabalho, veja primeiro se o site de destino tem uma API oficial ou um painel de vendedor; se tiver, use isso em vez de analisar HTML. Se não, leia o arquivo robots.txt do site e os termos de uso. Como ler as regras do robots.txt está em O que é robots.txt.

O fluxo tem seis nós:

  1. Schedule Trigger: inicia o fluxo uma vez por dia. No acompanhamento de preços, uma consulta a cada minuto raramente é necessária.
  2. Lista de produtos: pegue os endereços de uma planilha do Google Sheets ou de um nó Edit Fields. Cada linha traz um campo url.
  3. Loop Over Items: processa a lista item por item. Deixe Batch Size em 1.
  4. HTTP Request: escreva a expressão {{ $json.url }} no campo URL, defina o Proxy em Options e deixe o formato como texto na opção Response.
  5. HTML: escolha Extract HTML Content como operação e defina os campos a extrair com seletores CSS.
  6. Wait: espera alguns segundos e volta ao início do laço.

Quando o laço termina, você grava os dados em uma planilha, compara com o preço do dia anterior em um nó If e envia um aviso se houver diferença.

O nó HTTP Request fica assim no JSON do fluxo exportado:

json
{
  "parameters": {
    "url": "={{ $json.url }}",
    "options": {
      "proxy": "http://user:pass@pr.proxynet.io:8000",
      "timeout": 20000,
      "response": {
        "response": { "fullResponse": true, "responseFormat": "text" }
      }
    }
  },
  "name": "HTTP Request",
  "type": "n8n-nodes-base.httpRequest",
  "typeVersion": 4.2
}

No nó HTML, três linhas bastam para este site:

KeyCSS SelectorReturn Value
tituloh1Text
precop.price_colorText
estoquep.availabilityText

Ative Trim Values e Clean Up Text em Options; assim as quebras de linha e os espaços sobrando na linha de estoque são removidos. A saída é um texto como £51.77; para transformar em número, retire o símbolo da moeda e ajuste o separador decimal no nó seguinte.

Uma montagem mais completa, com correspondência de produtos, histórico de preços e alerta por limite, está em Como monitorar preços da concorrência no e-commerce, e o lado de produto na nossa página de monitoramento de preços.

Como montar limite de taxa e novas tentativas no n8n?

Quando o n8n recebe uma lista, se você não disser o contrário ele envia a requisição de todos os itens em sequência e sem esperar. Usar proxy não torna esse comportamento educado; só muda o endereço de onde as requisições saem. A carga que o site de destino enxerga é você quem precisa limitar. A página "Handle rate limits" da documentação do n8n mostra três caminhos nativos:

  • Batching (HTTP Request → Options): com Items per Batch você define quantas requisições saem de uma vez e com Batch Interval (ms) a espera entre os lotes. É o caminho mais curto e não exige código.
  • Loop Over Items + Wait: a montagem que usamos no exemplo acima. Você vê a espera depois de cada requisição de forma explícita e pode colocar outros nós no meio.
  • Retry On Fail (aba Settings do nó): tenta de novo a requisição que falhou; com Wait Between Tries (ms) você informa o tempo entre as tentativas.

Ativar o Retry On Fail para qualquer erro não é o certo. 429 e 503 se resolvem com espera; 403 e 407 não, e enviar a mesma requisição cinco vezes só gera tráfego desnecessário. Na tabela de Códigos de status HTTP no web scraping reunimos em quais códigos tentar de novo e em quais parar; a lógica do limite de taxa está em 429 Too Many Requests. Se quiser ramificar pelo código de status, ative Include Response Headers and Status e Never Error na opção Response do HTTP Request e depois olhe o campo statusCode em um nó If.

É preciso um nó separado ou código para a rotação?

Alguns templates de scraping para n8n trazem trechos de JavaScript que guardam uma lista de proxies em um nó Code e escolhem o próximo a cada requisição. Se o que você tem é uma lista de endereços IP avulsos, isso é necessário. Com um endpoint rotativo, não: você se conecta a um único endereço como pr.proxynet.io:8000 e o provedor troca o IP de saída a cada nova conexão. Do lado do n8n, o endereço no campo Proxy nunca muda. O detalhe do mecanismo está em O que é rotação de IP e como funciona, e o lado de produto na página de Proxies rotativos.

No sentido contrário, há trabalhos em que o IP nunca pode mudar. Se a API de um parceiro só aceita requisições de endereços liberados e você usa o n8n Cloud, sair por um endereço fixo como Proxies ISP, em vez dos IPs variáveis do Cloud, resolve o problema. Tratamos esse cenário em IP estático para acesso a API.

Como usar proxy no nó AI Agent?

Você pode ligar o HTTP Request ao nó AI Agent do n8n como ferramenta (tool); o modelo chama essa ferramenta quando precisa ler uma página ou uma API. O HTTP Request ligado como ferramenta tem a mesma seção Options, então a opção Proxy funciona aqui do mesmo jeito. A documentação acrescenta mais uma opção para esse uso: Optimize Response filtra os campos JSON ou extrai só o texto do HTML antes de entregar a resposta ao modelo, e reduz a quantidade de tokens gastos.

Em uma montagem com agente, atenção a dois pontos. Limite na definição da ferramenta os endereços que o agente pode acessar: em vez de deixar a URL inteira por conta do modelo, defina um domínio fixo e um parâmetro de caminho que o modelo preenche. Já as requisições ao provedor do modelo de linguagem não passam pelo HTTP Request; para colocá-las atrás de um proxy são necessárias variáveis de ambiente em uma instalação self-hosted, e vale testar à parte se o nó do modelo respeita a variável. Como os agentes acessam a web está em Agentes de IA: planejamento, ferramentas e memória e Acesso seguro à web para LLMs. Para páginas que exigem um navegador de verdade, veja Playwright MCP.

Como confirmar que o proxy está funcionando?

Como um endereço escrito errado pode ser ignorado sem gerar erro, teste sempre o ajuste:

  1. Coloque dois nós HTTP Request em um fluxo vazio. O endereço dos dois deve ser um serviço que devolve o IP de onde a requisição veio (por exemplo https://api.ipify.org?format=json).
  2. No primeiro, deixe a opção Proxy vazia; no segundo, preencha.
  3. Execute os dois. O primeiro nó deve mostrar o IP do seu servidor n8n (ou do Cloud), e o segundo o IP de saída do proxy. Se os dois endereços forem iguais, o proxy não está ativo.
  4. Se você usa variáveis de ambiente, faça o mesmo teste com um nó com o campo Proxy vazio: se o IP mudou, a variável está sendo lida.

O detalhe dos passos está em Como testar um proxy.

Erros comuns e o que significam

ErroDe onde vemCausa provávelO que fazer
ECONNREFUSEDServidor n8nPorta do proxy errada ou firewall bloqueando a saídaCopie de novo o endereço no painel e confira a liberação de saída para essa porta
407 Proxy Authentication RequiredProxySenha errada, caractere especial sem codificação ou IP fora da whitelistEscreva as credenciais dentro do endereço, com codificação percentual
400 Bad Request (só em destinos HTTPS)ProxyO cliente envia a requisição direto ao proxy em vez de abrir um túnelAtualize o n8n; veja a nota abaixo
ETIMEDOUT / ECONNRESETRedeO proxy está inacessível ou o destino é muito lentoAumente o valor de Options → Timeout e escolha um local de saída mais próximo
ENOTFOUNDDNSNome de host do proxy digitado erradoCopie o nome no painel e escreva de novo
403 / 429 do destinoSite de destinoO proxy funciona; o problema é velocidade ou tipo de IPReduza o ritmo com Batching e Wait e diagnostique a causa

A linha do 400 conta uma história própria do n8n. O nó HTTP Request usa por baixo a biblioteca Axios, e o suporte nativo a proxy do Axios é conhecido por enviar a requisição direto ao proxy em destinos HTTPS, em vez de abrir um túnel CONNECT. A issue #9169 do repositório do n8n documenta que esse comportamento causava o erro 400 no nó. A issue é de 2024. Na versão atual que testamos, o nó abriu um túnel CONNECT no proxy para um destino HTTPS e buscou a página sem problemas. Se em uma versão antiga do n8n os endereços HTTP passam pelo proxy e os HTTPS retornam 400, o primeiro passo é atualizar.

Se você vê no navegador o aviso de que o servidor proxy não está respondendo, o problema não tem relação com o n8n; veja O servidor proxy não está respondendo.

Casos de uso

  • Acompanhamento de preço e estoque: fluxos que rodam uma vez por dia e avisam quando há mudança. A montagem é a mesma do exemplo acima; o lado de produto está na nossa página de monitoramento de preços.
  • Conferência de conteúdo que muda conforme a localização: executar o mesmo nó com proxies de saída em países diferentes para comparar como a mesma página aparece. Para uma cobertura ampla de países, usam-se Proxies residenciais.
  • Coleta de conteúdo em pequena escala: manchetes, número de anúncios, catálogos públicos. Quando a escala cresce, faz mais sentido migrar para uma solução de web crawler.

Erros de configuração frequentes

  • Escrever a senha do proxy na seção Authentication. Essa seção vai para o site de destino. As credenciais do proxy ficam dentro do endereço.
  • Não escrever o esquema. Escreva http://pr.proxynet.io:8000 em vez de pr.proxynet.io:8000; um endereço sem esquema pode ser ignorado sem gerar erro.
  • Esquecer o limite de taxa depois de adicionar o proxy. Uma lista de cem itens, sem Batching ou Wait, envia cem requisições de uma vez.
  • Automatizar páginas que exigem login ou contêm dados pessoais. Um proxy não torna legítimo um fluxo que descumpre os termos da plataforma ou a LGPD; resumimos o quadro legal em Web scraping é legal?.

Guia de decisão

NecessidadeRecomendação
Uso o n8n Cloud e quero que um único nó saia pelo proxyHTTP Request → Options → Proxy, com usuário e senha
No n8n self-hosted, todos os nós devem sair pelo proxyHTTP_PROXY, HTTPS_PROXY, NO_PROXY; depois, verificação nó por nó
Há um ajuste global, mas um nó precisa sair por outro paísOpção Proxy nesse nó; ela prevalece sobre o ajuste global
Um IP diferente a cada requisiçãoEndpoint rotativo; não escreva rotação em um nó Code
A outra parte vai liberar o meu IPProxy com IP fixo (ISP) ou o seu próprio servidor com IP fixo
A página carrega com JavaScript e o nó HTML volta vazioO HTTP Request não basta; automação de navegador ou o endpoint JSON que o site usa por trás

Perguntas frequentes

Dá para usar proxy no n8n Cloud?

Sim, a opção Proxy do nó HTTP Request também existe no Cloud; já as variáveis de ambiente não podem ser usadas. Como os IPs de saída do Cloud não são fixos, conecte-se ao proxy com usuário e senha, e não com whitelist de IP.

Para que serve o N8N_PROXY_HOPS?

Ele informa quantos proxies reversos (nginx, Caddy, balanceador de carga em nuvem) existem na frente do n8n; o valor padrão é 0. Não tem relação com as requisições de saída nem com o ajuste de proxy deste artigo.

O que tem prioridade: o ajuste Proxy do nó ou a variável de ambiente?

O ajuste do nó. É o que a documentação do n8n diz; no nosso teste local, com a variável de ambiente apontando para uma porta fechada, o nó com a opção Proxy preenchida saiu pelo próprio proxy.

O Zapier tem o mesmo ajuste?

Não. O passo Webhooks do Zapier tem campos de endereço, dados, cabeçalhos e autenticação básica; não há campo de proxy. Para passar a requisição por um proxy, é preciso colocar no meio um pequeno serviço seu: o Zapier chama esse serviço, e o serviço vai ao destino pelo proxy.

Sou obrigado a manter a senha do proxy em texto puro dentro do fluxo?

Se você usa a opção do nó, sim: o campo é texto puro. Em uma instalação self-hosted, o caminho para tirar a senha do fluxo são as variáveis de ambiente: as credenciais ficam na configuração do servidor e não entram no JSON do fluxo. Se você tem um servidor com IP fixo, a whitelist de IP elimina a senha por completo.

Dá para extrair dados de qualquer site com o HTTP Request?

Não. O nó não executa JavaScript, então em páginas cujo conteúdo é montado no navegador o campo que você procura não está na resposta. Sites com proteção contra bots também podem devolver uma página de verificação, com ou sem proxy. Nesse caso, o que cabe fazer não é forçar a proteção, e sim olhar a API oficial do site ou as opções de parceria de dados.

Em resumo

No n8n o proxy é definido em dois lugares: o campo Proxy da seção Options do nó HTTP Request e as variáveis HTTP_PROXY, HTTPS_PROXY e NO_PROXY de uma instalação self-hosted. As credenciais vão dentro do endereço, o ajuste do nó prevalece sobre o global e N8N_PROXY_HOPS diz respeito só a instalações atrás de um proxy reverso. O proxy não substitui o limite de taxa: reduza o ritmo com Batching ou Wait, espere quando aparecer um 429 e prefira a API oficial quando ela existir. Você pode comparar os tipos de IP adequados aos seus fluxos na página de nossos serviços de proxy.