Voltar ao blogue
Guias
Raluca PenciucLast updated on Mar 31, 202611 min read

As 5 melhores alternativas ao Node-Fetch para efetuar pedidos HTTP

As 5 melhores alternativas ao Node-Fetch para efetuar pedidos HTTP

Quem faz parte da equipa do node-fetch sabe como é fácil instalar o módulo. Basta um simples comando «npm install node-fetch» para o ter à disposição num instante. Não é necessário implementar o XMLHttpRequest.

Aprender a recuperar dados pode ser complicado, uma vez que existem milhares de soluções disponíveis. Cada solução afirma ser melhor do que a outra. Algumas soluções oferecem suporte multiplataforma, enquanto outras se concentram na experiência do programador.

As aplicações web precisam de comunicar frequentemente com servidores web para obter vários recursos. Poderá precisar de enviar ou recuperar dados para uma API ou servidor externo.

Neste blogue, vou guiá-lo através do node-fetch. Irá compreender o que é e como pode ser utilizado. Também incluí alternativas ao node-fetch pelas quais poderá optar.

Sem mais delongas, vamos ao que interessa!

Node-fetch

O Node-Fetch é um pequeno módulo que adiciona a API Fetch ao Node.js.

fonte da imagem

Com o fetch (no navegador ou através do Node Fetch), pode combinar a sintaxe await e .then para tornar a conversão do fluxo de leitura em JSON um pouco mais agradável — assim, os dados,

Como se pode ver no exemplo abaixo, este contém o JSON sem a necessidade de uma variável intermediária deselegante.

Fonte da imagem

Além disso, o Node Fetch suporta extensões úteis, tais como restrição do tamanho da resposta, limite de redirecionamentos e falhas explícitas para depuração.

Pode utilizar várias bibliotecas, incluindo o node-fetch no NodeJS, para enviar ou buscar dados. Já no lado do cliente, a API Fetch do JavaScript pode ser usada para fazer o mesmo

Pode carregar o módulo node-fetch antes de aceder à página inicial do Google. O endereço do servidor para o qual está a enviar um pedido HTTP é o único argumento que fornece ao método fetch(). 

Pode encadear várias rotinas .then() para o ajudar a controlar a resposta e os dados da nossa solicitação, uma vez que o node-fetch é baseado em promessas.

O campo URL contém simplesmente o URL real do recurso que queremos obter. Se não for um URL absoluto, a função falhará. 

Quando quiser utilizar get() para algo diferente de uma solicitação GET padrão, usamos o parâmetro opcional options, mas abordaremos isso com mais detalhes posteriormente.

O método devolve um objeto Response, que fornece funções práticas e informações de resposta HTTP, tais como:

  • Text () - devolve o corpo da resposta como uma cadeia de caracteres.
  • JSON() - converte o corpo da resposta num objeto JSON e devolve um erro se não for possível processá-lo.
  • Status e statusText - estes campos incluem informações sobre o código de estado HTTP.
  • Ok - é igual a true se o status for um código de status 2xx (uma condição de sucesso).
  • Headers - um objeto que contém cabeçalhos de resposta; a função get() pode ser utilizada para obter um único cabeçalho.

Popularidade

  • 8 milhões de downloads semanais no npm
  • +6,8 mil módulos que dependem do node-rest
  • +383 Forks
  • 3,8 mil estrelas no GitHub
  • 38 colaboradores

Funcionalidades do node-fetch

  • Manter a consistência com a API .fetch da janela.
  • Ao seguir a especificação stream e os detalhes de implementação da especificação fetch do WHATWG, faça escolhas ponderadas e descreva as variações conhecidas.
  • Utilização de funções assíncronas e promessas nativas 
  • Tanto na solicitação como na resposta, utilize fluxos Node nativos para o corpo.
  • Decodifique a codificação de conteúdo (gzip/brotli/deflate) corretamente e converta automaticamente a saída de cadeias de caracteres (incluindo res.json() e res.text()) para UTF-8.
  • Para depuração, adições valiosas incluem restrição do tamanho da resposta, limite de redirecionamentos e erros explícitos.

Prós

  • Com um tamanho de instalação de cerca de 150 KB, o Node-fetch é talvez o módulo de pedidos HTTP mais leve. 
  • Oferece funcionalidades impressionantes, tais como o modo JSON, a API de promessas, compatibilidade com navegadores, cancelamento de pedidos e a capacidade de substituir a sua biblioteca de promessas ou descodificar codificações web contemporâneas como deflate/grip. 
  • Segue os padrões mais recentes de pedidos HTTP em JavaScript e continua a ser o módulo mais descarregado depois do request, com cerca de 8 milhões de descargas por semana (ultrapassando o Got, o Axios e o Superagent).

Por que precisa de uma alternativa ao Node-fetch

  • Não suporta HTTP/2 nem cookies
  • O Node-fetch não permite o armazenamento em cache em conformidade com a RFC
  • O Node-fetch não repete a tentativa em caso de falha. 
  • Não suporta eventos de progresso, erros de metadados, tempos de espera avançados ou hooks.

As minhas principais alternativas ao Node-fetch

Aqui está uma lista das minhas 5 melhores alternativas ao Node-fetch que pode utilizar nas suas soluções

  • Axios
  • Got
  • Superagent
  • Request
  • WebscrapingAPI

Vou analisar cada um deles para que compreenda melhor o que são e o que oferecem.

Vamos lá!

1. Axios

O Axios é um cliente HTTP baseado em promessas para o Node.js e o navegador. Tal como o SuperAgent, analisa automaticamente respostas JSON. A sua capacidade de realizar consultas simultâneas utilizando o Axios distingue-o ainda mais. 

Para instalar o Axios

fonte da imagem

Pode fazer a solicitação passando a configuração relevante.

Fonte da imagem

Devido à sua simplicidade, alguns programadores preferem o Axios às APIs integradas. No entanto, muitas pessoas sobrestimam a necessidade de tal biblioteca. O node-fetch é totalmente capaz de recriar a funcionalidade essencial do Axios.

Popularidade

  • +4,4 milhões de downloads no npm
  • +15,6 mil módulos dependem dele
  • +57 mil estrelas no GitHub
  • 71 colaboradores
  • +4,4 mil forks

Funcionalidades

  • Efetue XMLHttpRequests no navegador
  • Suporta a API Promise
  • Fazer pedidos HTTP no node.js
  • Interceptar respostas e pedidos
  • Cancelar pedidos
  • Transformar dados de resposta e solicitação
  • Transformações automáticas de dados JSON
  • Serialização automática de objetos de dados
  • Suporte do lado do cliente

Vantagens

  • O Axios permite-lhe configurar e personalizar totalmente as suas solicitações, alimentando-o com um único objeto de configuração. Pode monitorizar o estado das solicitações POST e executar modificações automatizadas de dados JSON.
  • O Axios também é o módulo de solicitações HTTP front-end mais utilizado. É bastante popular e segue os padrões mais recentes de JavaScript. Ele lida com cancelamento de solicitações, redirecionamento, gzip/deflate, problemas de metadados e hooks.

Contras

  • O Axios não suporta HTTP2, Stream API e Electron. Também não repete tentativas em caso de falhas e funciona no Node.js com suporte integrado a promessas. Para versões mais antigas, é necessário o Q promise ou o Bluebird. 2. Got

O Got é mais uma estrutura de pedidos HTTP robusta e fácil de usar para o Node.js. Foi inicialmente concebido como um substituto leve para o popular pacote Request. Consulte esta tabela detalhada para saber como o Got se compara a outras bibliotecas.

Para instalar o Got

Fonte da imagem

O Got tem uma opção para o tratamento de cargas JSON. 

Fonte da imagem

Ao contrário do SuperAgent e do Axios, o Got não analisa automaticamente o JSON. Para ativar esta funcionalidade, { JSON: true } é adicionado como um argumento no código.

De acordo com a documentação, o Got foi criado porque a solicitação é muito grande (contém vários gigabytes!). 4,46 MB vs. 302 KB recebidos).

Popularidade

  • +6,2 milhões de downloads no npm
  • +2,5 mil módulos dependem do Got
  • +280 forks
  • +5 mil estrelas no GitHub
  • 71 colaboradores

Funcionalidades

  • Suporta HTTP/2
  • Suporta PromiseAPI e StreamAPI
  • Reintenta em caso de falha
  • Segue redirecionamentos

Vantagens

  • Em comparação com as outras alternativas, o Got suporta mais funcionalidades e está a ganhar popularidade, uma vez que é intuitivo, tem um tamanho de instalação mínimo e está atualizado com todos os novos padrões de JavaScript.

Contras

  • O Got não tem suporte para navegadores 3. SuperAgent

O SuperAgent é uma pequena biblioteca de pedidos HTTP que pode ser utilizada no Node.js e em navegadores para efetuar consultas AJAX. 

O SuperAgent tem milhares de plugins disponíveis para realizar tarefas como impedir o armazenamento em cache, transformar cargas de servidor e adicionar sufixos ou prefixos a URLs. 

Para instalar o SuperAgent

fonte da imagem

Utilização no Node

fonte da imagem

Também pode aumentar a funcionalidade criando o seu próprio plugin. O SuperAgent também pode analisar dados JSON por si.

Popularidade

  • 2,5 milhões de downloads no npm
  • +6,4 mil módulos dependem do SuperAgent
  • +1,2 mil forks
  • +14 mil estrelas no GitHub
  • 182 colaboradores

Prós

  • O SuperAgent é conhecido por fornecer uma interface fluida para a execução de pedidos HTTP, uma arquitetura de plugins e vários plugins para muitas funcionalidades populares atualmente acessíveis (por exemplo, o seu prefixo para adicionar um prefixo a cada URL).
  • O Superagent também oferece uma API de stream e promise, cancelamento de pedidos, novas tentativas quando um pedido falha, suporta gzip/deflate e gere eventos de progresso.

Contras

  • A compilação do Superagent está atualmente a falhar. Também não oferece acompanhamento do progresso do upload como o XMLHttpRequest
  • Não suporta temporizadores, erros de metadados ou hooks. 4. Request

O Request está entre os clientes de pedidos HTTP simples mais populares do Node.js e foi um dos primeiros módulos a ser publicado no registo npm.

fonte da imagem

Tem mais de 14 milhões de downloads por semana e foi concebido para ser a forma mais simples de efetuar pedidos HTTP no Node.js. 

Um ficheiro também pode ser transmitido para uma solicitação POST ou PUT. Este método irá comparar a extensão do ficheiro com os tipos de conteúdo mapeados para extensões de ficheiro. 

Também pode personalizar cabeçalhos HTTP como User-Agent no objeto de opções.

Propriedades

  • +9 milhões de downloads no npm
  • +6,4 mil módulos dependentes do Request
  • +3,2 mil forks
  • +25,2 mil estrelas no GitHub
  • 126 colaboradores

Funcionalidades

  • Suporta HTTPS
  • por predefinição e segue redirecionamentos.

Prós

  • É fácil começar a usar o Request e é fácil de utilizar.
  • É um módulo popular e amplamente utilizado para efetuar chamadas HTTP

Contras

Foi totalmente descontinuado desde 2020. Não são esperadas novas alterações

5. WebScrapingAPI

Devo dizer que o WebScrapingAPI me ofereceu soluções práticas para os desafios que enfrentei ao extrair dados da web. O WebScrapingAPI poupou-me tempo e dinheiro, ajudando-me a concentrar-me no desenvolvimento do meu produto.

O WebScrapingAPI é uma API de nível empresarial, escalável e fácil de usar, que ajuda a recolher e gerir dados HTML. Não nos esqueçamos de que obtém toda a sua solução de web scraping numa única API, o que significa um código limpo.

Fonte da imagem

Definir a chave da API e os argumentos da URL, bem como a sua chave de acesso ao site que pretende extrair, é o pedido básico mais simples que pode fazer à API.

Compreender quais as capacidades que a WebScrapingAPI oferece é fundamental para nos ajudar na nossa jornada de web scraping. Esta informação pode ser obtida na extensa documentação, incluindo exemplos de código em várias linguagens de programação.

Muitas vezes deparei-me com contramedidas que detetavam e bloqueavam o meu bot de fazer o que eu queria. Isso acontece porque não é possível fazer web scraping em todos os sites. Alguns empregam contramedidas como impressão digital do navegador e CAPTCHAs, o que é uma chatice.

Lidar com tecnologias de deteção de bots pode ser um desafio, mas a WebScrapingAPI oferece soluções que vão desde CAPTCHAs até ao bloqueio de IP e tentativas automáticas, gerindo tudo isso. Basta concentrar-se nos seus objetivos. Eles tratam de tudo o resto.

fonte

Possui excelente proficiência técnica com mais de 100 milhões de proxies, garantindo que não seja bloqueado. Isso porque alguns sites só podem ser rastreados em determinados locais em todo o mundo. Para fazer isso, precisa de um proxy para aceder aos seus dados.

Uma vez que gerir um conjunto de proxies é difícil, a WebScrapingAPI faz tudo por si. Dispõe de milhões de proxies rotativos para garantir que permanece indetetável. Também permite o acesso a conteúdos com restrições geográficas utilizando um endereço IP específico.

Esta API oferece renderização em Javascript. Pode ativar a renderização em Javascript utilizando navegadores reais. Após ativá-la, poderá ver tudo o que é apresentado aos utilizadores. Isso inclui aplicações de página única que utilizam AngularJS, React ou outras bibliotecas.

fonte da imagem

O que os utilizadores vêem é exatamente o que obtém. Que melhor vantagem competitiva poderia haver?

Além disso, a infraestrutura da API está construída na Amazon Web Services, oferecendo-lhe acesso a dados globais em massa extensos, seguros e fiáveis.

Na minha opinião sincera, utilizar a WebScrapingAPI é uma vantagem.

Prós

  • Construída na AWS
  • Preços acessíveis
  • Arquitetura focada na velocidade
  • TODOS os pacotes incluem renderização em Javascript
  • Serviços de alta qualidade, tempo de atividade e estabilidade absoluta
  • Mais de 100 milhões de proxies rotativos para reduzir o bloqueio
  • Funcionalidades personalizáveis

Contras

Nenhum até ao momento.

Preços

  • O plano inicial para utilizar esta API custa 49 $ por mês. 
  • Opções de teste gratuito

A WebScrapingAPI é uma boa opção se achar que não tem tempo para criar o web scraper do zero. Não hesite em experimentá-la

Por que razão a WebScrapingAPI é a minha principal recomendação:

Recomendo a WebScrapingAPI porque oferece soluções simples de web scraping para todos numa única API. Também possui uma das melhores interfaces de utilizador, facilitando a extração de dados.

A API é suficientemente potente para realizar o seu trabalho.

Vamos parar um momento para pensar em todos os dados à sua disposição. Não se esqueça de que pode obter preços competitivos e oferecer melhores ofertas aos seus clientes. 

A WebScrapingAPI oferece-lhe otimização de preços. Como? Deixe-me explicar desta forma. O seu negócio pode crescer significativamente ao ter uma melhor visão da concorrência. À medida que os preços flutuam no seu setor, pode usar os dados desta API para saber como o seu negócio irá sobreviver.

Fonte da imagem

A WebScrapingAPI é útil quando procura um artigo que deseja comprar. Pode utilizar os dados para comparar preços de vários fornecedores e escolher a melhor oferta.

Além disso, não precisa de se preocupar em ser bloqueado. Porquê? Porque esta API garante que obtém os dados de que precisa sem bloqueios. Com milhões de proxies rotativos, permanece indetetável e pode aceder a conteúdos com restrições geográficas utilizando um endereço IP específico.

Não é fantástico?

A infraestrutura da API também está construída na Amazon Web Services, oferecendo-lhe acesso a dados globais em massa extensos, seguros e fiáveis. Por isso, empresas como a Steelseries, a Deloitte e a Wunderman Thompson confiam nesta API para as suas necessidades de dados e serviços de web scraping.

fonte

Além disso, custa apenas 49 dólares por mês. Estou fascinado com a velocidade que possui. E com a utilização de uma rede global de proxies rotativos, já conta com mais de 10 000 utilizadores a utilizar os seus serviços. É por isso que recomendo a utilização da WebScrapingAPI na recolha de dados.

Comece a sua jornada de scraping com a API REST líder em web scraping

Sobre o autor
Raluca Penciuc, Desenvolvedor Full-Stack @ WebScrapingAPI
Raluca PenciucDesenvolvedor Full-Stack

Raluca Penciuc é programadora Full Stack na WebScrapingAPI, onde desenvolve scrapers, aperfeiçoa estratégias de evasão e procura formas fiáveis de reduzir a deteção nos sites-alvo.

Comece a construir

Pronto para expandir a sua recolha de dados?

Junte-se a mais de 2.000 empresas que utilizam a WebScrapingAPI para extrair dados da Web à escala empresarial, sem quaisquer custos de infraestrutura.