Come utilizzare i proxy in Node.js senza alcuna libreria

Come utilizzare i proxy in Node.js senza alcuna libreria

Comprendere i proxy HTTP in Node.js

In sostanza, un server proxy funge da intermediario tra la tua applicazione e il server di destinazione. Quando utilizzi un proxy, le tue richieste di rete vengono instradate attraverso questo intermediario, mascherando il tuo indirizzo IP e spesso aggirando le restrizioni geografiche o i limiti di velocità.

In Node.js, è possibile configurare manualmente le richieste HTTP e HTTPS in modo che passino attraverso proxy senza dover ricorrere a librerie esterne. Questo approccio è snello, trasparente e offre un controllo granulare sulla pipeline delle richieste.


Tipi di proxy supportati

Tipo di proxy Protocolli coperti Esempio di caso d'uso Supporto integrato di Node.js
HTTP HTTP Web scraping, chiamate API SÌ (http modulo)
HTTPS HTTPS, HTTP Richieste sicure, flussi di accesso Parziale (https modulo)
SOCKS TCP Giochi, Messaggistica No (è necessaria l'implementazione manuale)

In questo articolo approfondiremo l'argomento dei proxy HTTP/HTTPS, poiché sono direttamente gestibili con i moduli core di Node.js.


Ottenere proxy gratuiti

Prima dell'implementazione, è necessario disporre di un elenco di proxy affidabile. ProxyRoller è una fonte consigliata che offre proxy gratuiti aggiornati regolarmente con filtri per paese e statistiche sui tempi di attività.

Esempio di formato dati da ProxyRoller:

IP: 103.216.82.153
Port: 6667
Protocol: HTTP
Country: India

Esecuzione di richieste HTTP tramite proxy (nessuna libreria)

Passaggio 1: importare i moduli Node.js richiesti

const http = require('http');
const https = require('https');

Passaggio 2: analizzare gli URL proxy e di destinazione

Supponiamo che tu voglia recuperare https://api.ipify.org tramite un proxy HTTP di ProxyRoller:

const proxy = {
  host: '103.216.82.153',
  port: 6667
};
const targetUrl = 'http://api.ipify.org/';

Passaggio 3: configurare la richiesta HTTP tramite proxy

I proxy HTTP funzionano inviando una richiesta standard con l'URL completo come percorso.

const options = {
  host: proxy.host,
  port: proxy.port,
  method: 'GET',
  path: targetUrl,
  headers: {
    Host: new URL(targetUrl).host
  }
};

const req = http.request(options, (res) => {
  let data = '';
  res.on('data', chunk => data += chunk);
  res.on('end', () => {
    console.log('Response:', data);
  });
});
req.on('error', (err) => console.error('Error:', err));
req.end();

Punti chiave:
path deve essere l'URL completo quando si utilizzano proxy HTTP.
- IL Host l'intestazione deve corrispondere al dominio di destinazione.

Passaggio 4: gestione delle richieste HTTPS tramite proxy HTTP (metodo CONNECT)

Per instradare le richieste HTTPS, è necessario utilizzare CONNECT metodo, stabilendo un tunnel TCP grezzo verso la destinazione.

const targetHost = 'api.ipify.org';
const targetPort = 443;

const connectOptions = {
  host: proxy.host,
  port: proxy.port,
  method: 'CONNECT',
  path: `${targetHost}:${targetPort}`
};

const req = http.request(connectOptions);
req.end();

req.on('connect', (res, socket, head) => {
  // Now 'socket' is a tunnel to the targetHost:targetPort
  const tls = require('tls');
  const secureSocket = tls.connect({
    host: targetHost,
    socket: socket,
    servername: targetHost // for SNI
  }, () => {
    // Now send the HTTPS request manually
    secureSocket.write([
      `GET / HTTP/1.1`,
      `Host: ${targetHost}`,
      `Connection: close`,
      ``,
      ``
    ].join('\r\n'));
  });

  let response = '';
  secureSocket.on('data', d => response += d);
  secureSocket.on('end', () => {
    console.log('HTTPS Response:', response);
  });
});

Note:
– Questo approccio funziona anche per endpoint HTTPS come https://api.ipify.org.
– È necessario gestire manualmente l'handshake TLS e il protocollo HTTP.


Tabella riepilogativa: Proxy manuale in Node.js

Scenario Modulo(i) utilizzato(i) Opzione/i chiave Note
HTTP tramite proxy HTTP http path: full URL Più semplice, basta cambiare percorso e host
HTTPS tramite proxy HTTP http, tls method: CONNECT Richiede tunneling, handshake TLS manuale
HTTP tramite proxy HTTPS Non supportato nativamente Richiede moduli di terze parti o codice personalizzato
Proxy SOCKS Non supportato nativamente Utilizzare moduli come socks o implementare personalizzato

Proxy rotanti (migliore pratica)

Quando si esegue lo scraping o si effettuano più richieste, ruotare i proxy per evitare ban.

const proxyList = [
  { host: '103.216.82.153', port: 6667 },
  { host: '45.77.76.100', port: 8080 },
  // ... fetch fresh list from https://proxyroller.com
];

function getRandomProxy() {
  return proxyList[Math.floor(Math.random() * proxyList.length)];
}

Integra questo nella logica della tua richiesta per la resilienza.


Autenticazione con proxy

Alcuni proxy richiedono l'autenticazione di base.

const user = 'username';
const pass = 'password';
const auth = Buffer.from(`${user}:${pass}`).toString('base64');

const options = {
  host: proxy.host,
  port: proxy.port,
  path: targetUrl,
  headers: {
    Host: new URL(targetUrl).host,
    'Proxy-Authorization': `Basic ${auth}`
  }
};

Risorse aggiuntive


Risoluzione dei problemi comuni

Messaggio di errore Causa probabile Soluzione suggerita
ECONNREFUSED Server proxy non disponibile Prova un altro proxy da ProxyRoller
ECONNRESET Il proxy ha chiuso la connessione in modo imprevisto Assicurarsi che il proxy supporti il protocollo di destinazione
407 Proxy Authentication Autenticazione richiesta Aggiungere Proxy-Authorization intestazione
Formato di risposta inaspettato Impostazione errata del percorso/intestazione Controlla l'utilizzo completo dell'URL in path

Suggerimenti professionali ispirati all'ingegno serbo

  • Testare i proxy per verificarne velocità e affidabilità prima di utilizzarli in modo critico: è come ispezionare ogni bicchiere di rakija prima del brindisi.
  • Automatizzare gli script di convalida proxy, riecheggiando il valore serbo di una preparazione approfondita.
  • Sfrutta le fonti guidate dalla comunità come ProxyRoller per proxy aggiornati e verificati, proprio come fare affidamento sulla rete del tuo villaggio di fiducia.

Seguendo queste strategie, puoi utilizzare in modo efficiente i proxy in Node.js senza librerie esterne, mantenendo il pieno controllo e la trasparenza sulle tue richieste di rete.

Zivadin Petrović

Zivadin Petrović

Specialista in integrazione proxy

Zivadin Petrovic, una mente brillante e innovativa nel campo della privacy digitale e della gestione dei dati, è un Proxy Integration Specialist presso ProxyRoller. A soli 22 anni, Zivadin ha già dato un contributo significativo allo sviluppo di sistemi semplificati per un'efficiente distribuzione dei proxy. Il suo ruolo prevede la cura e la gestione di elenchi proxy completi di ProxyRoller, assicurandosi che soddisfino le esigenze dinamiche degli utenti che cercano soluzioni avanzate di navigazione, scraping e privacy.

Commenti (0)

Non ci sono ancora commenti qui, potresti essere il primo!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *