[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-pt-guia-got-scraping-nodejs-proxies-residenciais":3},{"success":4,"payload":5,"related":59,"errors":123},true,{"id":6,"slug":7,"title":8,"excerpt":9,"body_html":10,"meta_title":11,"meta_description":12,"canonical_url":13,"canonical_override":14,"og_title":11,"og_description":12,"og_image_url":15,"faq_json":16,"key_takeaways":14,"allow_index":26,"noindex_google_only":26,"allow_follow":4,"published_at":27,"updated_at":27,"content_updated_at":28,"featured_image_url":29,"featured_image_alt":30,"card_image_url":31,"reading_time_minutes":32,"author":33,"categories":37,"tags":44,"alternates":45,"locale_paths":54,"views":58},176,"guia-got-scraping-nodejs-proxies-residenciais","Guia de got-scraping em Node.js com proxies residenciais","Aprenda a usar got-scraping em Node.js com proxies residenciais: geração de headers coerentes, HTTP\u002F2, rotação de IPs e padrões de produção para scraping em escala.","\u003Cp>Se você já construiu um scraper em Node.js com \u003Ccode>axios\u003C\u002Fcode> ou \u003Ccode>got\u003C\u002Fcode> puro e viu suas requisições sendo bloqueadas após poucos minutos, você não está sozinho. Anti-bot systems modernos como Cloudflare, Datadome e PerimeterX não olham apenas o IP — eles analisam a coerência dos headers, a impressão TLS e o padrão de comportamento. É aqui que got-scraping em Node.js entra como uma ferramenta de propósito específico, e é por isso que combinar \u003Cstrong>got-scraping proxy\u003C\u002Fstrong> residencial se torna essencial para operações em escala.\u003C\u002Fp>\n\n\u003Cblockquote>\u003Cstrong>Aviso legal:\u003C\u002Fstrong> Este guia aborda coleta de dados públicos apenas. scraping pode violar Termos de Serviço ou leis como a FTC Act nos EUA e o \u003Ca href=\"https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2016\u002F679\u002Foj\" rel=\"noopener noreferrer\">GDPR (Regulamento UE 2016\u002F679)\u003C\u002Fa> na Europa. Honre sempre o \u003Ccode>robots.txt\u003C\u002Fcode>, respeite limites de taxa e prefira APIs oficiais quando disponíveis.\u003C\u002Fblockquote>\n\n\u003Ch2>O que é got-scraping em Node.js e por que requisições puras são bloqueadas\u003C\u002Fh2>\n\n\u003Cp>got-scraping em Node.js é um cliente HTTP construído pela Apify sobre o popular pacote \u003Ccode>got\u003C\u002Fcode>, projetado especificamente para web scraping. Ele adiciona um gerador de headers de navegador, suporte a HTTP\u002F2 e opções de proxy pensadas para evasão de anti-bot. O projeto é open-source e mantido no \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fapify\u002Fgot-scraping\" rel=\"noopener noreferrer\">repositório oficial do got-scraping no GitHub\u003C\u002Fa>.\u003C\u002Fp>\n\n\u003Cp>O problema com \u003Ccode>got\u003C\u002Fcode> ou \u003Ccode>axios\u003C\u002Fcode> puros é que eles enviam headers mínimos e muitas vezes fora de ordem. Um navegador Chrome real envia mais de 15 headers numa ordem específica, incluindo \u003Ccode>sec-ch-ua\u003C\u002Fcode>, \u003Ccode>sec-fetch-*\u003C\u002Fcode>, \u003Ccode>accept-language\u003C\u002Fcode> e \u003Ccode>priority\u003C\u002Fcode>. Anti-bot systems comparam a ordem e a presença desses headers contra fingerprints conhecidos. Se o seu \u003Ccode>User-Agent\u003C\u002Fcode> diz Chrome 120 mas não há \u003Ccode>sec-ch-ua\u003C\u002Fcode>, o bloqueio é imediato.\u003C\u002Fp>\n\n\u003Cp>Além disso, a camada TLS do Node.js tem uma fingerprint diferente do Chrome. Ferramentas como \u003Ca href=\"https:\u002F\u002Fja3er.com\u002F\" rel=\"noopener noreferrer\">JA3 fingerprinting\u003C\u002Fa> podem identificar o cliente como não-browser antes mesmo de os headers serem lidos. O got-scraping mitiga isso parcialmente com HTTP\u002F2 nativo e headers coerentes, mas a fingerprint TLS ainda é uma área onde proxies residenciais ajudam a diluir o padrão de detecção.\u003C\u002Fp>\n\n\u003Ch3>Como o header-generator cria conjuntos coerentes\u003C\u002Fh3>\n\n\u003Cp>O pacote \u003Ccode>header-generator\u003C\u002Fcode>, usado internamente pelo got-scraping, produz conjuntos de headers que imitam navegadores reais. Ele garante:\u003C\u002Fp>\n\n\u003Cul>\n\u003Cli>\u003Cstrong>Ordem de headers\u003C\u002Fstrong> consistente com o navegador escolhido (Chrome, Firefox, Safari).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Presença de \u003Ccode>sec-ch-ua\u003C\u002Fcode>\u003C\u002Fstrong> e variantes como \u003Ccode>sec-ch-ua-mobile\u003C\u002Fcode> e \u003Ccode>sec-ch-ua-platform\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode>accept-language\u003C\u002Fcode>\u003C\u002Fstrong> coerente com o sistema operacional e região simulados.\u003C\u002Fli>\n\u003Cli>Headers de fetch metadata (\u003Ccode>sec-fetch-dest\u003C\u002Fcode>, \u003Ccode>sec-fetch-mode\u003C\u002Fcode>, \u003Ccode>sec-fetch-site\u003C\u002Fcode>, \u003Ccode>sec-fetch-user\u003C\u002Fcode>).\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Cp>Isso significa que cada requisição parece vir de um navegador real, não de um script Node.js. Para alvos com anti-bot de nível intermediário, isso sozinho já resolve muitos bloqueios. Para alvos mais agressivos, você ainda precisa de IPs residenciais.\u003C\u002Fp>\n\n\u003Ch2>Superfície idiomática: got.extend, useHeaderGenerator e proxyUrl\u003C\u002Fh2>\n\n\u003Cp>O got-scraping é idiomático ao ecossistema \u003Ccode>got\u003C\u002Fcode>. Ele usa \u003Ccode>got.extend()\u003C\u002Fcode> para criar uma instância customizada com middlewares e hooks. A função \u003Ccode>useHeaderGenerator\u003C\u002Fcode> é o middleware que injeta headers gerados em cada requisição.\u003C\u002Fp>\n\n\u003Ch3>Instalação e configuração base\u003C\u002Fh3>\n\n\u003Cpre>\u003Ccode>import { gotScraping } from &apos;got-scraping&apos;;\nimport { useHeaderGenerator, HeaderGenerator } from &apos;header-generator&apos;;\n\nconst headerGenerator = new HeaderGenerator({\n  browsers: [&apos;chrome&apos;],\n  devices: [&apos;desktop&apos;],\n  operatingSystems: [&apos;windows&apos;, &apos;macos&apos;],\n});\n\nconst got = gotScraping.extend({\n  headerGeneratorOptions: {\n    browsers: [&apos;chrome&apos;],\n    devices: [&apos;desktop&apos;],\n    operatingSystems: [&apos;windows&apos;, &apos;macos&apos;],\n  },\n  \u002F\u002F got-scraping usa useHeaderGenerator internamente,\n  \u002F\u002F mas você pode customizar:\n  hooks: {\n    beforeRequest: [useHeaderGenerator(headerGenerator)],\n  },\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Cp>Aqui está o que cada opção faz:\u003C\u002Fp>\n\n\u003Cul>\n\u003Cli>\u003Ccode>browsers\u003C\u002Fcode>: define quais navegadores simular (\u003Ccode>chrome\u003C\u002Fcode>, \u003Ccode>firefox\u003C\u002Fcode>, \u003Ccode>safari\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>\u003Ccode>devices\u003C\u002Fcode>: \u003Ccode>desktop\u003C\u002Fcode> ou \u003Ccode>mobile\u003C\u002Fcode> — afeta headers como \u003Ccode>sec-ch-ua-mobile\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Ccode>operatingSystems\u003C\u002Fcode>: \u003Ccode>windows\u003C\u002Fcode>, \u003Ccode>macos\u003C\u002Fcode>, \u003Ccode>linux\u003C\u002Fcode>, \u003Ccode>android\u003C\u002Fcode>, \u003Ccode>ios\u003C\u002Fcode> — afeta \u003Ccode>sec-ch-ua-platform\u003C\u002Fcode> e \u003Ccode>user-agent\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch3>A opção proxyUrl para HTTP\u002F1.1 e HTTP\u002F2\u003C\u002Fh3>\n\n\u003Cp>O got-scraping suporta a opção \u003Ccode>proxyUrl\u003C\u002Fcode> tanto para proxies HTTP\u002F1.1 quanto HTTP\u002F2. Isso é importante porque alguns provedores de proxy oferecem gateways HTTP\u002F2 que são mais difíceis de detectar. A opção aceita o formato padrão de URL com autenticação:\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode>const response = await got(&apos;https:\u002F\u002Fexample.com&apos;, {\n  proxyUrl: &apos;http:\u002F\u002Fuser-country-US:pass@gate.proxyhat.com:8080&apos;,\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Cp>Para SOCKS5, basta usar o esquema \u003Ccode>socks5:\u002F\u002F\u003C\u002Fcode> na porta \u003Ccode>1080\u003C\u002Fcode>:\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode>const response = await got(&apos;https:\u002F\u002Fexample.com&apos;, {\n  proxyUrl: &apos;socks5:\u002F\u002Fuser-country-DE:pass@gate.proxyhat.com:1080&apos;,\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch2>Roteando através de proxies residenciais em gate.proxyhat.com\u003C\u002Fh2>\n\n\u003Cp>Quando os headers e o suporte HTTP\u002F2 já fazem suas requisições parecerem legítimas, o próximo vetor de detecção é o IP. IPs de datacenter são trivialmente identificados — serviços como MaxMind GeoIP e IP2Location classificam ASN por tipo (ISP residencial vs datacenter vs hosting). Se o alvo vê um IP da AWS ou DigitalOcean com headers de Chrome desktop, a inconsistência é óbvia.\u003C\u002Fp>\n\n\u003Cp>Proxies residenciais usam IPs atribuídos a ISPs reais — casas, dispositivos móveis, conexões de fibra doméstica. Para o alvo, a requisição parece vir de um usuário comum. Isso é o complemento perfeito para o nodejs scraping proxy com got-scraping: headers coerentes + IP residencial = requisição que passa por anti-bot de nível avançado.\u003C\u002Fp>\n\n\u003Cp>Com o ProxyHat, você controla geolocalização e sessão diretamente no nome de usuário:\u003C\u002Fp>\n\n\u003Cul>\n\u003Cli>\u003Ccode>user-country-US\u003C\u002Fcode> — IP residencial nos EUA.\u003C\u002Fli>\n\u003Cli>\u003Ccode>user-country-DE-region-state_of_berlin-city-berlin\u003C\u002Fcode> — IP residencial em Berlim.\u003C\u002Fli>\n\u003Cli>\u003Ccode>user-sid-abc123\u003C\u002Fcode> — sessão fixa (sticky IP) para manter cookies entre requisições.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Cp>Para casos onde HTTP não é suficiente, o SOCKS5 na porta \u003Ccode>1080\u003C\u002Fcode> oferece uma camada de transporte diferente, útil quando o alvo bloqueia conexões HTTP proxy conhecidas. Veja todas as localizações disponíveis na página de \u003Ca href=\"\u002Fpt\u002Flocations\">locations do ProxyHat\u003C\u002Fa>.\u003C\u002Fp>\n\n\u003Ch2>Exemplo runnable: rotação de IPs residenciais com retry hooks\u003C\u002Fh2>\n\n\u003Cp>Aqui está um exemplo completo que rotaciona IPs residenciais por requisição, usa sessões fixas quando necessário e implementa retry com backoff exponencial. O got scraping header generator cuida dos headers automaticamente.\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode>import { gotScraping } from &apos;got-scraping&apos;;\nimport pLimit from &apos;p-limit&apos;;\n\n\u002F\u002F ProxyHat SDK — gera nomes de usuário por requisição\nfunction proxyUsername(opts = {}) {\n  const parts = [];\n  if (opts.country) parts.push(`country-${opts.country}`);\n  if (opts.city) parts.push(`city-${opts.city.toLowerCase()}`);\n  if (opts.session) parts.push(`sid-${opts.session}`);\n  return `user-${parts.join(&apos;-&apos;)}`;\n}\n\nfunction proxyUrl(opts = {}) {\n  const user = proxyUsername(opts);\n  return `http:\u002F\u002F${user}:PASSWORD@gate.proxyhat.com:8080`;\n}\n\n\u002F\u002F Instância got-scraping com headers de Chrome desktop\nconst got = gotScraping.extend({\n  headerGeneratorOptions: {\n    browsers: [&apos;chrome&apos;],\n    devices: [&apos;desktop&apos;],\n    operatingSystems: [&apos;windows&apos;, &apos;macos&apos;],\n  },\n  retry: {\n    limit: 3,\n    statusCodes: [403, 429, 500, 502, 503],\n    backoffLimit: 5000,\n  },\n  hooks: {\n    beforeRequest: [\n      (options) =&gt; {\n        \u002F\u002F Rotaciona sessão a cada requisição\n        const session = Math.random().toString(36).slice(2, 10);\n        options.proxyUrl = proxyUrl({\n          country: &apos;US&apos;,\n          session,\n        });\n      },\n    ],\n    afterResponse: [\n      (response, retryWithMergedOptions) =&gt; {\n        if (response.statusCode === 403) {\n          console.log(&apos;403 recebido — rotacionando IP e tentando novamente&apos;);\n          const newSession = Math.random().toString(36).slice(2, 10);\n          return retryWithMergedOptions({\n            proxyUrl: proxyUrl({ country: &apos;US&apos;, session: newSession }),\n          });\n        }\n        return response;\n      },\n    ],\n  },\n});\n\n\u002F\u002F Coleta com concorrência limitada\nconst limit = pLimit(10);\n\nasync function scrapeUrl(url) {\n  const response = await got(url, {\n    timeout: { request: 15000 },\n    responseType: &apos;json&apos;,\n  });\n  return response.body;\n}\n\n\u002F\u002F Executa 100 URLs com no máximo 10 concorrentes\nconst urls = Array.from({ length: 100 }, (_, i) =&gt;\n  `https:\u002F\u002Fhttpbin.org\u002Fjson?page=${i}`\n);\n\nconst results = await Promise.all(\n  urls.map((url) =&gt; limit(() =&gt; scrapeUrl(url)))\n);\n\nconsole.log(`Coletados ${results.length} resultados`);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Cp>Este exemplo demonstra três padrões críticos:\u003C\u002Fp>\n\n\u003Cul>\n\u003Cli>Rotação por requisição: cada requisição recebe uma sessão única, garantindo um IP diferente.\u003C\u002Fli>\n\u003Cli>Retry com rotação: o hook \u003Ccode>afterResponse\u003C\u002Fcode> detecta 403 e tenta novamente com um novo IP.\u003C\u002Fli>\n\u003Cli>Concorrência limitada: \u003Ccode>p-limit\u003C\u002Fcode> com 10 conexões simultâneas evita sobrecarregar tanto seu servidor quanto o alvo.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>Padrões de produção: hooks, cookies e Crawlee\u003C\u002Fh2>\n\n\u003Ch3>Retry e afterResponse hooks\u003C\u002Fh3>\n\n\u003Cp>O sistema de hooks do \u003Ccode>got\u003C\u002Fcode> é o ponto de extensão idiomático para lógica de retry customizada. Além do \u003Ccode>beforeRequest\u003C\u002Fcode> e \u003Ccode>afterResponse\u003C\u002Fcode> mostrados acima, você pode usar:\u003C\u002Fp>\n\n\u003Cul>\n\u003Cli>\u003Ccode>beforeRetry\u003C\u002Fcode>: executado antes de cada tentativa de retry — útil para trocar proxy.\u003C\u002Fli>\n\u003Cli>\u003Ccode>beforeRedirect\u003C\u002Fcode>: executado antes de seguir redirects — útil para validar a URL de destino.\u003C\u002Fli>\n\u003Cli>\u003Ccode>init\u003C\u002Fcode>: executado quando a requisição é criada — útil para logging.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Cpre>\u003Ccode>hooks: {\n  beforeRetry: [\n    (error, retryOptions) =&gt; {\n      console.log(`Retry para ${retryOptions.url} — erro: ${error.code}`);\n      \u002F\u002F Troca a sessão do proxy no retry\n      retryOptions.proxyUrl = proxyUrl({\n        country: &apos;US&apos;,\n        session: Math.random().toString(36).slice(2, 10),\n      });\n    },\n  ],\n},\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Cookie jars para sessões persistentes\u003C\u002Fh3>\n\n\u003Cp>Alguns sites exigem sessões persistentes — você precisa manter cookies entre requisições. O \u003Ccode>got\u003C\u002Fcode> suporta \u003Ccode>tough-cookie\u003C\u002Fcode> nativamente:\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode>import { CookieJar } from &apos;tough-cookie&apos;;\n\nconst cookieJar = new CookieJar();\n\nconst got = gotScraping.extend({\n  headerGeneratorOptions: {\n    browsers: [&apos;chrome&apos;],\n    devices: [&apos;desktop&apos;],\n    operatingSystems: [&apos;windows&apos;],\n  },\n  cookieJar,\n  hooks: {\n    beforeRequest: [\n      (options) =&gt; {\n        \u002F\u002F Sessão fixa para manter cookies válidos\n        options.proxyUrl = proxyUrl({\n          country: &apos;US&apos;,\n          session: &apos;checkout-flow-001&apos;,\n        });\n      },\n    ],\n  },\n});\n\n\u002F\u002F Primeira requisição estabelece cookies\nawait got(&apos;https:\u002F\u002Fexample.com\u002Flogin&apos;);\n\n\u002F\u002F Segunda requisição reusa cookies e mesmo IP\nawait got(&apos;https:\u002F\u002Fexample.com\u002Fdashboard&apos;);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Integração com Crawlee CheerioCrawler\u003C\u002Fh3>\n\n\u003Cp>Para operações maiores, o \u003Ca href=\"https:\u002F\u002Fcrawlee.dev\u002F\" rel=\"noopener noreferrer\">Crawlee\u003C\u002Fa> é o framework de scraping da Apify que usa got-scraping internamente. O \u003Ccode>CheerioCrawler\u003C\u002Fcode> é ideal para páginas estáticas — ele faz a requisição com got-scraping e parseia o HTML com Cheerio:\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode>import { CheerioCrawler } from &apos;crawlee&apos;;\n\nconst crawler = new CheerioCrawler({\n  requestHandler: async ({ $, request }) =&gt; {\n    const title = $(&apos;title&apos;).text();\n    const links = $(&apos;a[href]&apos;).map((_, el) =&gt; $(el).attr(&apos;href&apos;)).get();\n    console.log(`${request.url}: ${title} (${links.length} links)`);\n  },\n  \u002F\u002F got-scraping options passadas para cada requisição\n  useHeaderGenerator: true,\n  headerGeneratorOptions: {\n    browsers: [&apos;chrome&apos;],\n    devices: [&apos;desktop&apos;],\n    operatingSystems: [&apos;windows&apos;, &apos;macos&apos;],\n  },\n  proxyConfiguration: {\n    proxyUrls: [\n      &apos;http:\u002F\u002Fuser-country-US:PASSWORD@gate.proxyhat.com:8080&apos;,\n    ],\n  },\n  maxConcurrency: 10,\n  maxRequestRetries: 3,\n});\n\nawait crawler.run([&apos;https:\u002F\u002Fexample.com&apos;]);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Cp>O Crawlee gerencia fila de URLs, deduplicação, retry e armazenamento automaticamente. Para scraping de SERP em escala, veja nosso guia de \u003Ca href=\"\u002Fpt\u002Fuse-cases\u002Fserp-tracking\">SERP tracking com proxies\u003C\u002Fa>.\u003C\u002Fp>\n\n\u003Ch2>Quando um navegador headless é inevitável\u003C\u002Fh2>\n\n\u003Cp>got-scraping resolve a maioria dos casos de páginas estáticas e APIs internas. Mas alguns sites exigem execução de JavaScript, resolução de CAPTCHAs ou interação com DOM. Nesses casos, você precisa de um navegador headless como Playwright ou Puppeteer.\u003C\u002Fp>\n\n\u003Cp>Sinais de que você precisa ir além do got-scraping:\u003C\u002Fp>\n\n\u003Cul>\n\u003Cli>A página carrega conteúdo via XHR\u002Ffetch após o load — o HTML inicial está vazio.\u003C\u002Fli>\n\u003Cli>Há um challenge de JavaScript que precisa ser executado (Cloudflare JS challenge, Datadome).\u003C\u002Fli>\n\u003Cli>CAPTCHAs aparecem mesmo com headers e IPs residenciais corretos.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Cp>Para esses cenários, o Crawlee oferece \u003Ccode>PlaywrightCrawler\u003C\u002Fcode> que combina navegador headless com proxies residenciais. A \u003Ca href=\"https:\u002F\u002Fdocs.proxyhat.com\u002F\" rel=\"noopener noreferrer\">documentação do ProxyHat\u003C\u002Fa> tem exemplos de configuração para Playwright.\u003C\u002Fp>\n\n\u003Ch2>Ética: dados públicos, robots.txt e limites\u003C\u002Fh2>\n\n\u003Cp>Antes de qualquer scraping, verifique três coisas:\u003C\u002Fp>\n\n\u003Col>\n\u003Cli>robots.txt: respeite as diretivas \u003Ccode>Disallow\u003C\u002Fcode>. Ferramentas como \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Frobots-parser\" rel=\"noopener noreferrer\">robots-parser\u003C\u002Fa> podem automatizar isso.\u003C\u002Fli>\n\u003Cli>Termos de Serviço: alguns sites proíbem scraping explicitamente. Violar ToS pode ter consequências legais sob leis como a \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FComputer_Fraud_and_Abuse_Act\" rel=\"noopener noreferrer\">Computer Fraud and Abuse Act (CFAA)\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>API oficial: se existe uma API, use-a. É mais estável, legalmente mais segura e frequentemente mais rápida.\u003C\u002Fli>\n\u003C\u002Fol>\n\n\u003Cp>Para dados pessoais, o \u003Ca href=\"https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2016\u002F679\u002Foj\" rel=\"noopener noreferrer\">GDPR\u003C\u002Fa> exige base legal para processamento. Dados públicos não são isentos — o processamento deve ter uma base legal legítima.\u003C\u002Fp>\n\n\u003Ch2>Comparação: got-scraping vs axios vs Crawlee\u003C\u002Fh2>\n\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Característica\u003C\u002Fth>\n\u003Cth>axios\u003C\u002Fth>\n\u003Cth>got puro\u003C\u002Fth>\n\u003Cth>got-scraping\u003C\u002Fth>\n\u003Cth>Crawlee (CheerioCrawler)\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Geração de headers de browser\u003C\u002Ftd>\n\u003Ctd>Manual\u003C\u002Ftd>\n\u003Ctd>Manual\u003C\u002Ftd>\n\u003Ctd>Automática (header-generator)\u003C\u002Ftd>\n\u003Ctd>Automática (usa got-scraping)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>HTTP\u002F2 nativo\u003C\u002Ftd>\n\u003Ctd>Não\u003C\u002Ftd>\n\u003Ctd>Sim\u003C\u002Ftd>\n\u003Ctd>Sim\u003C\u002Ftd>\n\u003Ctd>Sim\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Proxy rotation middleware\u003C\u002Ftd>\n\u003Ctd>Manual\u003C\u002Ftd>\n\u003Ctd>Manual (hooks)\u003C\u002Ftd>\n\u003Ctd>Sim (proxyUrl)\u003C\u002Ftd>\n\u003Ctd>Sim (proxyConfiguration)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Cookie jar integrado\u003C\u002Ftd>\n\u003Ctd>Manual\u003C\u002Ftd>\n\u003Ctd>Sim (tough-cookie)\u003C\u002Ftd>\n\u003Ctd>Sim\u003C\u002Ftd>\n\u003Ctd>Sim\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Fila de URLs e deduplicação\u003C\u002Ftd>\n\u003Ctd>Não\u003C\u002Ftd>\n\u003Ctd>Não\u003C\u002Ftd>\n\u003Ctd>Não\u003C\u002Ftd>\n\u003Ctd>Sim\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Retry com rotação de proxy\u003C\u002Ftd>\n\u003Ctd>Manual\u003C\u002Ftd>\n\u003Ctd>Hooks\u003C\u002Ftd>\n\u003Ctd>Hooks + proxyUrl\u003C\u002Ftd>\n\u003Ctd>Integrado\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\u003Ch2>Key Takeaways\u003C\u002Fh2>\n\n\u003Cblockquote>\n\u003Cul>\n\u003Cli>got-scraping em Node.js resolve o problema de headers incoerentes que causa bloqueios em \u003Ccode>got\u003C\u002Fcode> e \u003Ccode>axios\u003C\u002Fcode> puros.\u003C\u002Fli>\n\u003Cli>O got scraping header generator produz conjuntos completos de headers de Chrome\u002FFirefox\u002FSafari com ordem correta, \u003Ccode>sec-ch-ua\u003C\u002Fcode> e \u003Ccode>accept-language\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Headers coerentes sem IP residencial ainda são detectáveis — got-scraping proxy residencial em \u003Ccode>gate.proxyhat.com:8080\u003C\u002Fcode> completa a camuflagem.\u003C\u002Fli>\n\u003Cli>Use \u003Ccode>got.extend()\u003C\u002Fcode> com \u003Ccode>headerGeneratorOptions\u003C\u002Fcode> e hooks de \u003Ccode>beforeRequest\u003C\u002Fcode> para rotação idiomática de proxies.\u003C\u002Fli>\n\u003Cli>Para escala, combine got-scraping com \u003Ccode>p-limit\u003C\u002Fcode> (concorrência limitada), \u003Ccode>tough-cookie\u003C\u002Fcode> (sessões) e Crawlee (fila e deduplicação).\u003C\u002Fli>\n\u003Cli>Respeite \u003Ccode>robots.txt\u003C\u002Fcode>, ToS e leis como CFAA e GDPR. Prefira APIs oficiais quando disponíveis.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fblockquote>\n\n\u003Cp>Pronto para começar? Veja os \u003Ca href=\"\u002Fpt\u002Fpricing\">planos do ProxyHat\u003C\u002Fa> e configure seu primeiro nodejs scraping proxy em minutos. Para mais casos de uso, visite nosso guia de \u003Ca href=\"\u002Fpt\u002Fuse-cases\u002Fweb-scraping\">web scraping com proxies\u003C\u002Fa>.\u003C\u002Fp>","got-scraping em Node.js com proxies residenciais | ProxyHat","Guia de got-scraping em Node.js: header generator, HTTP\u002F2, rotação de proxies residenciais e padrões de produção para scraping em escala.","\u002Fpt\u002Fblog\u002Fguia-got-scraping-nodejs-proxies-residenciais",null,"https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fguia-got-scraping-nodejs-proxies-residenciais-og.webp",[17,20,23],{"question":18,"answer":19},"O que é got-scraping em Node.js?","got-scraping é um cliente HTTP para Node.js construído pela Apify sobre o pacote got, projetado especificamente para web scraping. Ele inclui um gerador de headers de navegador (header-generator), suporte a HTTP\u002F2 e opções de proxy otimizadas para evasão de anti-bot. Ao contrário de got ou axios puros, o got-scraping envia headers coerentes com navegadores reais, incluindo sec-ch-ua, sec-fetch-* e accept-language na ordem correta, reduzindo bloqueios.",{"question":21,"answer":22},"Qual tipo de proxy funciona melhor para got-scraping em Node.js?","Proxies residenciais são a melhor opção para got-scraping em Node.js porque usam IPs de ISPs reais, impossíveis de distinguir de usuários comuns. Proxies de datacenter são rapidamente identificados por serviços como MaxMind GeoIP. Proxies móveis são ainda mais confiáveis mas mais caros. Para a maioria dos casos, residenciais com rotação por sessão (sticky sessions) oferecem o melhor equilíbrio entre custo e taxa de sucesso.",{"question":24,"answer":25},"Como evitar bloqueios ao implementar got-scraping em Node.js?","Para evitar bloqueios: (1) use headerGeneratorOptions com browsers, devices e operatingSystems coerentes; (2) rotacione IPs residenciais por requisição usando sessões únicas; (3) implemente retry hooks que trocam o IP ao receber 403 ou 429; (4) limite a concorrência com p-limit para não sobrecarregar o alvo; (5) use cookie jars para manter sessões quando necessário; (6) respeite robots.txt e rate limits do site alvo.",false,"2026-08-04T16:05:06+00:00","2026-10-03T08:57:48+00:00","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fguia-got-scraping-nodejs-proxies-residenciais-master.webp","got-scraping in Node.js: A Developer's Guide with Residential Proxies","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fguia-got-scraping-nodejs-proxies-residenciais-card.webp",12,{"name":34,"slug":35,"bio":36,"avatar_url":14,"website_url":14,"social_links":14},"ProxyHat Team","proxyhat-team","The ProxyHat editorial team covers proxies, web scraping, and data extraction.",[38],{"id":39,"slug":40,"name":41,"description":14,"meta_title":42,"meta_description":43,"parent_id":14},4,"guias-desenvolvedores","Guias para Desenvolvedores","Guias para Desenvolvedores | Blog ProxyHat","Tutoriais de código e guias SDK para integrar proxies em suas aplicações.",[],{"ru":46,"en":47,"it":48,"zh":49,"fr":50,"pl":51,"ko":52,"ja":53,"x-default":47},"\u002Fru\u002Fblog\u002Fgot-scraping-nodejs-residential-proxies","\u002Fblog\u002Fgot-scraping-nodejs-residential-proxies","\u002Fit\u002Fblog\u002Fguida-got-scraping-nodejs-proxy","\u002Fcn\u002Fblog\u002Fgot-scraping-nodejs-proxy-guide","\u002Ffr\u002Fblog\u002Fgot-scraping-nodejs-proxy-residentiel-1","\u002Fpl\u002Fblog\u002Fgot-scraping-nodejs-proxy","\u002Fko\u002Fblog\u002Fgot-scraping-nodejs-proxy-guide-1","\u002Fja\u002Fblog\u002Fgot-scraping-nodejs-purokishi",{"pt":13,"ru":46,"en":47,"it":48,"de":55,"es":56,"zh":49,"fr":50,"pl":51,"ko":52,"ja":53,"tr":57},"\u002Fde\u002Fblog\u002Fgot-scraping-nodejs-proxy-guide","\u002Fes\u002Fblog\u002Fguia-got-scraping-nodejs-proxy-residencial","\u002Ftr\u002Fblog\u002Fnodejs-got-scraping-proxy-rehberi",123,[60,76,92,107],{"id":61,"slug":62,"title":63,"excerpt":64,"featured_image_url":65,"featured_image_alt":66,"card_image_url":67,"og_image_url":68,"published_at":69,"updated_at":69,"content_updated_at":70,"reading_time_minutes":32,"is_featured":26,"indexable":26,"views":71,"author":72,"categories":73,"tags":75},175,"proxies-rotativos-em-colly","Proxies Rotativos em Colly: Guia para Desenvolvedores Go","Aprenda a integrar proxies rotativos residenciais no framework Colly de Go, usando RoundRobinProxySwitcher, SetProxyFunc, sessões sticky e geo-targeting para scraping de alta escala.","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fproxies-rotativos-em-colly-master.webp","Rotating Proxies in Colly: A Framework-Idiomatic Guide for Go Developers","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fproxies-rotativos-em-colly-card.webp","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fproxies-rotativos-em-colly-og.webp","2026-08-04T10:05:34+00:00","2026-10-03T23:53:00+00:00",73,{"name":34,"slug":35,"bio":36,"avatar_url":14,"website_url":14,"social_links":14},[74],{"id":39,"slug":40,"name":41,"description":14,"meta_title":42,"meta_description":43,"parent_id":14},[],{"id":77,"slug":78,"title":79,"excerpt":80,"featured_image_url":81,"featured_image_alt":82,"card_image_url":83,"og_image_url":84,"published_at":85,"updated_at":85,"content_updated_at":86,"reading_time_minutes":32,"is_featured":26,"indexable":4,"views":87,"author":88,"categories":89,"tags":91},195,"como-raspar-bybit-v5-market-api-proxies","Como coletar dados de mercado cripto com proxies rotativos (exemplo: Bybit V5 Market API)","Guia prático para desenvolvedores sobre como raspar os endpoints públicos \u002Fv5\u002Fmarket da Bybit com proxies residenciais rotativos via ProxyHat, incluindo rate limits, geo-restrições e WebSocket.","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fcomo-raspar-bybit-v5-market-api-proxies-master.webp","How to Scrape the Bybit V5 Market API with Rotating Proxies","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fcomo-raspar-bybit-v5-market-api-proxies-card.webp","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fcomo-raspar-bybit-v5-market-api-proxies-og.webp","2026-08-03T16:09:16+00:00","2026-10-04T02:43:17+00:00",88,{"name":34,"slug":35,"bio":36,"avatar_url":14,"website_url":14,"social_links":14},[90],{"id":39,"slug":40,"name":41,"description":14,"meta_title":42,"meta_description":43,"parent_id":14},[],{"id":93,"slug":94,"title":95,"excerpt":96,"featured_image_url":97,"featured_image_alt":98,"card_image_url":99,"og_image_url":100,"published_at":101,"updated_at":101,"content_updated_at":86,"reading_time_minutes":32,"is_featured":26,"indexable":4,"views":102,"author":103,"categories":104,"tags":106},194,"como-raspar-api-binance-proxies","Limites de peso em APIs de exchanges cripto: como coletar dados de mercado com proxies (exemplo Binance)","Guia prático para coletar dados públicos de mercado da Binance REST API em escala usando proxies residenciais rotativos, com exemplos em Python e Node.js, controle de peso e mitigação de banimentos por IP.","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fcomo-raspar-api-binance-proxies-master.webp","How to Scrape the Binance REST API with Proxies: A Developer Guide","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fcomo-raspar-api-binance-proxies-card.webp","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fcomo-raspar-api-binance-proxies-og.webp","2026-08-03T10:04:04+00:00",82,{"name":34,"slug":35,"bio":36,"avatar_url":14,"website_url":14,"social_links":14},[105],{"id":39,"slug":40,"name":41,"description":14,"meta_title":42,"meta_description":43,"parent_id":14},[],{"id":108,"slug":109,"title":110,"excerpt":111,"featured_image_url":112,"featured_image_alt":113,"card_image_url":114,"og_image_url":115,"published_at":116,"updated_at":116,"content_updated_at":117,"reading_time_minutes":32,"is_featured":26,"indexable":26,"views":118,"author":119,"categories":120,"tags":122},172,"usar-proxies-swift-urlsession","Usar Proxies em Swift com URLSession: Guia Completo para iOS e macOS","Aprenda a configurar proxies residenciais em Swift usando URLSession: HTTP, SOCKS5, autenticação, geo-targeting, async\u002Fawait e dicas de produção para iOS e macOS.","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fusar-proxies-swift-urlsession-master.webp","Using Proxies in Swift: A Code-First Guide to URLSession, SOCKS5 & Residential IPs","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fusar-proxies-swift-urlsession-card.webp","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fpt\u002Fusar-proxies-swift-urlsession-og.webp","2026-07-26T16:03:44+00:00","2026-10-03T08:57:47+00:00",235,{"name":34,"slug":35,"bio":36,"avatar_url":14,"website_url":14,"social_links":14},[121],{"id":39,"slug":40,"name":41,"description":14,"meta_title":42,"meta_description":43,"parent_id":14},[],[]]