Voltar ao blogue
Guias
Suciu Dan25 de abril de 20237 min de leitura

Desbloqueie sítios Web e proteja a sua identidade com proxies e Axios Node.js

Desbloqueie sítios Web e proteja a sua identidade com proxies e Axios Node.js

O que é a Axios?

O Axios é uma biblioteca de cliente HTTP popular, baseada em promessas, que permite fazer solicitações HTTP no Node.js. Ela é leve e fácil de usar, o que a torna uma ótima opção para projetos de raspagem da Web.

O Axios suporta uma vasta gama de funcionalidades, tais como proxies, conversão automática de dados JSON, suporte para cancelamento de pedidos e suporte para interceptores, o que lhe permite lidar com tarefas como a autenticação e o tratamento de erros.

O que são proxies?

Os proxies, também conhecidos como servidores proxy, actuam como intermediários entre um cliente (como um navegador Web ou um scraper) e um servidor de destino (como um sítio Web).

O proxy recebe pedidos do cliente e encaminha-os para o servidor de destino. O servidor de destino envia então a resposta de volta para o proxy, que por sua vez a envia de volta para o cliente.

No scraping da Web, pode utilizar proxies para ocultar o endereço IP do scraper, de modo a que o sítio Web que está a fazer o scraping não detecte e bloqueie o pedido. Além disso, a utilização de vários proxies pode ajudar a impedir a deteção e evitar o bloqueio.

Alguns fornecedores de proxy oferecem opções de rotação de IP, pelo que pode rodar os proxies para evitar ser bloqueado.

Pré-requisitos

Para usar um proxy com Axios e Node.js, é necessário ter o Node.js e o npm (Node Package Manager) instalados no computador. Se ainda não o tiver feito, pode descarregá-los e instalá-los a partir do site do Node.js.

Depois de instalar o Node.js e o npm, abra o terminal, crie uma nova pasta para o projeto e execute o comando `npm init`. Siga as instruções e crie um arquivo package.json base.

Instale o axios usando este comando:

npm install axios

Efetuar um pedido HTTP

Vamos fazer o nosso primeiro pedido com o Axios. Enviaremos um pedido GET para o ponto de extremidade ipify. A solicitação retornará nosso endereço IP.

Crie um ficheiro index.js e cole o seguinte código:

// Import axios

const axios = require('axios');

(async () => {

    // For storing the response

    let res

    try {

   	 // Make a GET request with Axios

   	 res = await axios.get('https://api.ipify.org?format=json')

   	 // Log the response data

   	 console.log(res.data)

    } catch(err) {

   	 // Log the error

   	 console.log(err)

    }

    // Exit the process

    process.exit()

})()

Começamos por importar a biblioteca axios e utilizamos o método get para enviar um pedido ao endpoint api.ipify.org.

Pode executar o código utilizando o comando `node index.js` no terminal. A saída deve exibir seu endereço IP. Verifique novamente o resultado acedendo ao URL no seu browser.

Utilização de proxies com o Axios

Antes de escrevermos qualquer código, vá ao sítio Web Free Proxy List e escolha um proxy que esteja mais próximo da sua localização. No meu caso, vou escolher um proxy para a Alemanha.

O método `get` do axios suporta um segundo parâmetro chamado options. Dentro deste parâmetro, podemos definir os detalhes do proxy.

O nosso pedido GET anterior com um proxy terá o seguinte aspeto:

res = await axios.get('https://api.ipify.org?format=json', {

    proxy: {

        protocol: 'http',

        host: '217.6.28.219',

        port: 80

    }

})

Ao executar o código, observará que o endereço IP devolvido é diferente do seu. Isto acontece porque o pedido é encaminhado através de um servidor proxy, protegendo assim o seu endereço IP da deteção.

E quanto à autenticação?

Ao subscrever um serviço proxy premium, receberá um nome de utilizador e uma palavra-passe para utilizar na sua aplicação para autenticação.

O objeto `proxy` do Axios tem uma propriedade auth que pode receber credenciais de autenticação. Um exemplo de uma solicitação GET usando essa configuração apareceria da seguinte forma:

res = await axios.get('https://api.ipify.org?format=json', {

    proxy: {

        protocol: 'http',

        host: '217.6.28.219',

        port: 80,

        auth: {

            username: "PROVIDED_USER",

            password: "PROVIDED_PASSWORD"

        }

    }

})

Definir o proxy como uma variável de ambiente

Uma forma alternativa de configurar um proxy no Axios é definindo as variáveis de ambiente `http_proxy` ou `https_proxy`. Esse método permite pular a configuração dos detalhes do proxy nos comandos do Axios, pois eles serão obtidos automaticamente das variáveis de ambiente.

Para compatibilidade entre plataformas, recomendo a instalação do pacote `cross-env` que implementa um comando semelhante ao export para Windows.

Instale o pacote globalmente usando este comando:

npm install -g cross-env

Vamos limpar o código `axios.get` e trazê-lo para a versão inicial. O código deve ficar assim:

res = await axios.get('https://api.ipify.org?format=json')

Em vez de simplesmente executar o código com node index.js, incluiremos o URL do proxy na frente do comando, como segue:

cross-env https_proxy=http://217.6.28.219:80/ node index.js

O resultado do script deve ser o endereço IP do proxy, em vez do seu. Para confirmar isto, pode visitar o URL do ipify no seu browser.

Proxies rotativos

A rotação de proxies é uma boa ideia porque ajuda a evitar a deteção e impede que os sítios Web bloqueiem o seu endereço IP. Os sítios Web podem localizar e bloquear os endereços IP que fazem demasiados pedidos num curto período de tempo ou os que estão associados a actividades de recolha de dados.

Podemos usar o site Free Proxy List para compilar uma lista com proxies que podemos rodar com cada pedido `axios`.

Tenha em atenção que a lista de proxies que pode encontrar no sítio Web pode ser diferente da lista que eu compilei. A lista que eu criei tem o seguinte aspeto:

const proxiesList = [

    {

   	 protocol: 'http',

   	 host: '217.6.28.219',

   	 port: 80

    },

    {

   	 protocol: 'http',

   	 host: '103.21.244.152',

   	 port: 80

    },

    {

   	 protocol: 'http',

   	 host: '45.131.4.28',

   	 port: 80

    }

];

Tudo bem, então vamos colocar a propriedade `proxy` de volta na configuração do `axios`. Mas ao invés de usar apenas um proxy, vamos escolher aleatoriamente um da nossa lista de proxies. O código ficará parecido com este:

res = await axios.get('https://api.ipify.org?format=json', {

    proxy: proxiesList[Math.floor(Math.random() * proxiesList.length)]

})

Este é o conteúdo do ficheiro index.js:

// Import axios

const axios = require('axios');

const proxiesList = [

    {

   	 protocol: 'http',

   	 host: '217.6.28.219',

   	 port: 80

    },

    {

   	 protocol: 'http',

   	 host: '172.67.180.244',

   	 port: 80

    },

    {

   	 protocol: 'http',

   	 host: '45.131.4.28',

   	 port: 80

    }

];

(async () => {

    // For storing the response

    let res

    try {

   	 // Make a GET request with Axios

   	 res = await axios.get('https://api.ipify.org?format=json', {

   		 proxy: proxiesList[Math.floor(Math.random() * proxiesList.length)]

   	 })

   	 // Log the response data

   	 console.log(res.data)

    } catch(err) {

   	 // Log the error

   	 console.log(err)

    }

    // Exit the process

    process.exit()

})()

Utilização de proxies WebScrapingAPI

A utilização de proxies premium de um serviço como o WebScrapingAPI é melhor do que a utilização de proxies gratuitos porque são mais fiáveis, mais rápidos e oferecem uma melhor segurança. Os proxies premium têm menos probabilidades de serem bloqueados pelos sítios Web e têm uma latência mais baixa.

Em contrapartida, os proxies gratuitos podem ser lentos, pouco fiáveis, conter malware e ter tendência para serem bloqueados pelos sítios Web.

Quer experimentar o WebScrapingAPI? Não há problema, basta inscrever-se no nosso teste gratuito de 14 dias e terá acesso a todas as funcionalidades interessantes e até 5.000 créditos para brincar.

Depois de ter uma conta, vá para o API Playground e selecione o separador Modo Proxy na secção Amostras de Código

Painel de exemplos de código com o Modo Proxy selecionado, mostrando um comando curl para encaminhar pedidos através de um servidor proxy

Vamos utilizar o URL do proxy no nosso código. O pedido GET do axios terá o seguinte aspeto:

res = await axios.get('https://api.ipify.org?format=json', {

    proxy: {

        host: 'proxy.webscrapingapi.com',

        port: 80,

        auth: {

            username: 'webscrapingapi.render_js=0.device=desktop.proxy_type=datacenter',

            password: '[YOUR_API_KEY]'

        }

    }

})

A propriedade `username` permite-lhe ativar ou desativar funcionalidades específicas da API. Lembre-se de que também deve definir a sua chave de API na propriedade `password`. Pode consultar a documentação completa aqui.

Sempre que executar este código, receberá um endereço IP diferente, uma vez que a WebScrapingAPI roda os IPs em cada pedido. Para saber mais sobre esse recurso, leia a documentação sobre o Modo proxy.

Além disso, tem a opção de alternar entre proxies de centro de dados e residenciais. Para obter mais informações sobre os diferentes tipos de proxies que oferecemos, visite a documentação sobre proxies.

Conclusão

A utilização de um proxy é um aspeto importante da recolha de dados da Web, uma vez que lhe permite ocultar o seu endereço IP e aceder a sítios Web bloqueados. O Axios é uma biblioteca poderosa para a recolha de dados e, quando combinado com um proxy fiável, pode conseguir uma extração de dados eficiente e rápida.

Ao utilizar um serviço de proxy premium como o WebScrapingAPI, terá acesso a uma vasta gama de funcionalidades, incluindo a rotação de IP e a opção de alternar entre proxies de centros de dados e residenciais.

Esperamos que este artigo tenha fornecido uma compreensão útil do uso de um proxy com Axios e Node.js e como ele pode ser benéfico para suas necessidades de raspagem. Sinta-se à vontade para se inscrever na nossa avaliação gratuita de 14 dias, para testar o nosso serviço e explorar todos os recursos e funcionalidades.

Sobre o autor
Suciu Dan, cofundador da WebScrapingAPI
Suciu DanCo-fundador

Suciu Dan é cofundador da WebScrapingAPI e escreve guias práticos, voltados para programadores, sobre web scraping em Python, web scraping em Ruby e infraestruturas de proxy.

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.