Zurück zum Blog
Anleitungen
Suciu DanLast updated on May 1, 202610 min read

Wie man den Axios Proxy in Node.js einrichtet: Auth, Rotation, SOCKS5

Wie man den Axios Proxy in Node.js einrichtet: Auth, Rotation, SOCKS5
Kurz gesagt: Axios leitet Anfragen über einen Proxy weiter, indem es ein proxy Objekt mit host, portund optionalen auth Feldern. Dieser Leitfaden behandelt die Einrichtung der Axios-Proxy-Konfiguration von Grund auf: grundlegende Verkabelung, authentifizierte Proxys, HTTPS-Tunneling, ein Rotationssystem mit Interceptors, SOCKS5 über socks-proxy-agentsowie die Diagnose häufiger Fehler. Jeder Codeausschnitt ist kopier- und einfügbarer Node.js-Code.

Wenn Sie HTTP-Datenverkehr in Node.js über einen Zwischenserver leiten müssen, ist das Verständnis der korrekten Einrichtung der Axios-Proxy-Konfiguration die erste Hürde. Axios ist einer der am häufigsten verwendeten HTTP-Clients im Node.js-Ökosystem und bietet Promise-basierte Anfragen sowie eine übersichtliche Konfigurations-API. Im Gegensatz zu vielen anderen HTTP-Bibliotheken stellt es ein spezielles proxy Objekt in seiner Request-Konfiguration zur Verfügung, anstatt sich auf Umgebungsvariablen oder URL-String-Hacks zu verlassen.

Dieser Artikel ist keine Einführung in das Thema „Was ist ein Proxy?“. Sie wissen bereits, was Proxys leisten. Stattdessen steigen wir direkt in die Axios-spezifische Implementierung ein: die minimale dreizeilige Node.js-Proxy-Einrichtung, authentifizierte Proxys, HTTPS-Tunneling-Mechanismen, ein produktionsreifes Rotationsmuster unter Verwendung von Interceptors, SOCKS5-Proxy-Unterstützung, selektiver Proxy-Bypass und eine Referenz zur Fehlerbehebung. Jedes Axios-Proxy-Beispiel hier zielt auf Node.js ab und ist so konzipiert, dass es nach einem npm install.

Schnellstart: Minimaler Axios-Proxy in drei Zeilen

Der schnellste Weg zu einem funktionierenden Axios-HTTP-Proxy besteht darin, ein proxy Objekts direkt an eine GET-Anfrage. Hier ist das absolute Minimum, das Sie benötigen:

const axios = require('axios');

axios.get('https://httpbin.org/ip', {
  proxy: { host: '123.45.67.89', port: 8080 }
}).then(res => console.log(res.data));

Führen Sie node app.js und überprüfen Sie das zurückgegebene origin . Wenn dort die IP-Adresse des Proxys statt der tatsächlichen Adresse Ihres Rechners angezeigt wird, funktioniert die Konfiguration. Dieser eine proxy Schlüssel unterscheidet eine direkte Anfrage von einer über den Proxy, und alles andere in dieser Anleitung zum Einrichten von Axios-Proxy-Verbindungen baut darauf auf.

So richten Sie die Axios-Proxy-Konfiguration ein

Das proxy Feld in einer Axios-Anfragekonfiguration akzeptiert mehrere Eigenschaften: host (Zeichenkette, erforderlich), port (Zahl, erforderlich), protocol (Standardwert http) sowie ein optionales auth Unterobjekt, das wir im nächsten Abschnitt behandeln. Im Gegensatz zu Bibliotheken, die eine Proxy-URL-Zeichenkette analysieren, behandelt Axios diese als separate Felder, was die programmatische Konfiguration des Axios-Proxys vereinfacht.

Konfiguration pro Anfrage vs. auf Instanzebene

Es gibt zwei Möglichkeiten, einen Proxy in Axios-Node.js-Projekten einzubinden: inline bei jedem Aufruf oder fest in einer wiederverwendbaren Instanz über axios.create().

Ansatz

Wann verwenden

Beispielszenario

Pro Anfrage (axios.get(url, { proxy }))

Sie wechseln die Proxys bei jeder Anfrage oder benötigen unterschiedliche Proxys für verschiedene Endpunkte

Scraping mehrerer geografisch eingeschränkter Websites

Auf Instanzebene (axios.create({ proxy }))

Ein Proxy für die gesamte Sitzung oder Sie möchten einen sauberen Standard, den einzelne Aufrufe überschreiben können

Unternehmens-Forward-Proxy, Staging-Umgebung

Ein Proxy auf Instanzebene erlaubt weiterhin Überschreibungen pro Anfrage. Wenn Sie proxy in der Konfiguration eines einzelnen Aufrufs übergeben, hat dies Vorrang vor der Instanz-Standardeinstellung. Um den Proxy für einen bestimmten Aufruf auf einer Instanz zu deaktivieren, die über einen solchen verfügt, übergeben Sie proxy: false . Diese Flexibilität auf Anfrageebene ist einer der Gründe, warum es sich lohnt, die Einrichtung von Axios-Proxy-Mustern zu erlernen.

Hinzufügen der Proxy-Authentifizierung

Die meisten kommerziellen Proxys erfordern Anmeldedaten. Axios handhabt dies über ein auth Objekt, das in proxy, was die Axios-Proxy-Authentifizierung vereinfacht:

const axios = require('axios');

const client = axios.create({
  proxy: {
    host: process.env.PROXY_HOST,
    port: Number(process.env.PROXY_PORT),
    auth: {
      username: process.env.PROXY_USER,
      password: process.env.PROXY_PASS
    }
  }
});

client.get('https://httpbin.org/ip')
  .then(res => console.log(res.data))
  .catch(err => console.error(err.message));

Ein paar praktische Hinweise:

  • Speichern Sie Anmeldedaten in Umgebungsvariablen, nicht im Quellcode. Eine .env Datei, die dotenv funktioniert während der Entwicklung gut.
  • Sonderzeichen in Passwörtern (wie @, #oder %) sind innerhalb des auth Objekt sicher, da Axios sie nicht so URL-kodiert, wie es eine Proxy-URL-Zeichenkette tun würde. Dies ist ein Vorteil des strukturierten Konfigurationsansatzes.
  • Wenn Ihr Proxy die Anmeldedaten ablehnt, erhalten Sie den Status „407 Proxy Authentication Required“. Überprüfen Sie den Benutzernamen und das Passwort noch einmal und vergewissern Sie sich, dass Ihr Proxy-Anbieter die Anmeldedaten nicht abgelaufen hat.

HTTPS-Proxys und der CONNECT-Tunnel

Wenn Ihre Ziel-URL HTTPS ist, leitet Axios die Anfrage nicht im Klartext über den Proxy weiter. Stattdessen sendet es eine HTTP-Anfrage CONNECT -Anfrage an den Proxy und fordert ihn auf, einen Raw-TCP-Tunnel zum Ziel zu öffnen. Sobald der Tunnel aufgebaut ist, findet der TLS-Handshake Ende-zu-Ende zwischen Ihrem Node.js-Prozess und dem Zielserver statt. Der Proxy leitet die verschlüsselten Bytes weiter, ohne sie lesen oder verändern zu können.

Dies ist aus zwei Gründen wichtig. Erstens bleiben Ihre gescrapten Daten vertraulich, selbst wenn der Proxy von einem Dritten betrieben wird. Zweitens sieht die Zielseite eine legitime TLS-Verbindung, sodass Ihre Anfragen im Vergleich zu einfachem HTTP natürlicher wirken. Axios übernimmt dieses Tunneling automatisch, wenn Sie einen Proxy für eine HTTPS-Ziel-URL konfigurieren (siehe Node.js-HTTPS-Dokumentation), sodass auf Ihrer Seite kein zusätzlicher Code erforderlich ist. Beachten Sie lediglich, dass der Proxy selbst nur die CONNECT-Methode unterstützen muss, was bei praktisch allen modernen HTTP-Proxys der Fall ist.

Ein Proxy-Rotationssystem aufbauen

Eine einzelne Proxy-IP wird schnell markiert, wenn Sie Hunderte von Anfragen an dieselbe Website senden. Rotierende Proxys verteilen Ihren Datenverkehr auf mehrere IPs, sodass die Zielseite den Eindruck erhält, es handele sich um viele verschiedene Besucher. Der Aufbau eines Proxy-Pools in Axios-Node.js-Projekten erfordert eine Pool-Klasse und eine gewisse Handhabung von ausgefallenen Proxys.

Hier ist ein minimalistischer Round-Robin-Pool, der ausgefallene Proxys nachverfolgt:

class ProxyPool {
  constructor(proxies) {
    this.proxies = proxies.map(p => ({ ...p, alive: true }));
    this.index = 0;
  }

  next() {
    const alive = this.proxies.filter(p => p.alive);
    if (!alive.length) throw new Error('All proxies dead');
    const proxy = alive[this.index % alive.length];
    this.index++;
    return { host: proxy.host, port: proxy.port, auth: proxy.auth };
  }

  markDead(host, port) {
    const p = this.proxies.find(
      px => px.host === host && px.port === port
    );
    if (p) p.alive = false;
  }
}

Verwenden Sie den Pool mit Axios wie folgt:

const pool = new ProxyPool([
  { host: '1.2.3.4', port: 8080, auth: { username: 'u1', password: 'p1' } },
  { host: '5.6.7.8', port: 8080, auth: { username: 'u2', password: 'p2' } },
  { host: '9.10.11.12', port: 3128 }
]);

async function fetchWithRotation(url) {
  const proxy = pool.next();
  try {
    const res = await axios.get(url, { proxy, timeout: 10000 });
    return res.data;
  } catch (err) {
    pool.markDead(proxy.host, proxy.port);
    return fetchWithRotation(url); // retry with next proxy
  }
}

Die Einstellung eines timeout (in Millisekunden) ist entscheidend. Manche Proxys hängen sich auf, anstatt einen Fehler zurückzugeben, und ohne Timeout bleibt Ihr Skript hängen. Zehn Sekunden sind ein vernünftiger Ausgangspunkt für die meisten Scraping-Aufgaben. Wenn Sie mehr darüber erfahren möchten, wie Sie Blockierungen beim Scraping vermeiden können, sind Tipps zur Verhinderung von IP-Sperren lesenswert.

Automatischer Proxy-Wechsel mit Axios-Interceptors

Die oben beschriebene Rotationslogik befindet sich in der aufrufenden Funktion. Ein übersichtlicheres Muster nutzt Axios-Response-Interceptors, um Proxys automatisch zu wechseln, wenn das Ziel einen 403- oder 429-Fehler zurückgibt, wodurch manueller Retry-Code aus jedem Aufruf entfernt wird:

const client = axios.create({ timeout: 10000 });

client.interceptors.request.use(config => {
  config.proxy = pool.next();
  return config;
});

client.interceptors.response.use(
  response => response,
  async error => {
    const { config } = error;
    const status = error.response?.status;
    if ((status === 403 || status === 429) && !config._retried) {
      config._retried = true;
      pool.markDead(config.proxy.host, config.proxy.port);
      config.proxy = pool.next();
      return client.request(config);
    }
    return Promise.reject(error);
  }
);

Der Request-Interceptor weist vor jedem ausgehenden Aufruf einen neuen Proxy zu. Der Response-Interceptor fängt Blockierungssignale ab und führt einmal pro Anfrage einen erneuten Versuch mit einer anderen IP durch (das _retried Flag verhindert Endlosschleifen). Dieser Interceptor-basierte Ansatz ist ein leistungsstarkes Axios-Proxy-Beispiel für Produktionssysteme, und Sie können die Rotationsstrategie ändern, ohne die Aufrufstellen anzutasten.

Verwendung von SOCKS5-Proxys mit Axios

Die integrierte proxy Option von Axios unterstützt nur HTTP- und HTTPS-Proxys. Wenn Sie einen SOCKS5-Proxy mit Axios benötigen (der auf einer niedrigeren Netzwerkschicht arbeitet und sowohl UDP als auch TCP unterstützt), benötigen Sie das socks-proxy-agent Paket.

Installieren Sie es zusammen mit Axios:

npm install axios socks-proxy-agent

Erstellen Sie anschließend einen Agenten und übergeben Sie ihn über httpAgent und httpsAgent:

const axios = require('axios');
const { SocksProxyAgent } = require('socks-proxy-agent');

const agent = new SocksProxyAgent('socks5://user:pass@127.0.0.1:1080');

axios.get('https://httpbin.org/ip', {
  httpAgent: agent,
  httpsAgent: agent,
  proxy: false  // disable built-in proxy so the agent handles routing
})
.then(res => console.log('SOCKS5 IP:', res.data.origin))
.catch(err => console.error(err.message));

Beachten Sie die proxy: false in Zeile 8. Dies ist unerlässlich, wenn Sie einen SOCKS5-Proxy mit Axios verbinden. Wenn Sie den integrierten Proxy neben einem benutzerdefinierten Agenten aktiviert lassen, kommt es zu Konflikten. Die Einstellung proxy: false weist Axios an, das gesamte Verbindungs-Routing an Ihren SOCKS-Agenten zu übergeben.

Umgebungsvariablen und selektiver Bypass

Eine häufige Falle beim Erlernen der Einrichtung von Axios-Proxy-Verbindungen: Axios liest HTTP_PROXY oder HTTPS_PROXY Umgebungsvariablen so aus, wie es Tools wie curl . Wenn Sie diese Variablen setzen und erwarten, dass Axios sie übernimmt, passiert nichts. Sie müssen sie selbst auslesen und in die Konfiguration einfügen:

const proxy = process.env.HTTP_PROXY
  ? { host: new URL(process.env.HTTP_PROXY).hostname,
      port: Number(new URL(process.env.HTTP_PROXY).port) }
  : undefined;

const res = await axios.get('https://example.com', { proxy });

Um den Proxy für bestimmte Anfragen selektiv zu deaktivieren (zum Beispiel bei Aufrufen interner APIs, die Ihr Netzwerk nicht verlassen sollen), übergeben Sie proxy: false für diese einzelnen Anfragen. Dies ist nützlich, wenn Sie einen Proxy auf Instanzebene über axios.create() , diesen jedoch für Zustandsprüfungen, Aufrufe an localhost oder Anfragen an öffentliche Entwickler-APIs umgehen müssen, bei denen ein Proxy lediglich Latenz verursacht, ohne einen Nutzen zu bieten.

Wenn einfache Proxys nicht ausreichen

Das Wechseln der IP-Adressen hilft Ihnen, die einfachsten Ratenbeschränkungen zu umgehen, aber ausgefeilte Anti-Bot-Systeme prüfen weit mehr als nur Ihre Quell-IP. Branchenstudien zufolge analysieren moderne Bot-Erkennungsplattformen angeblich Zeitmuster von Anfragen, TLS-Fingerabdrücke, die Konsistenz von Headern und Verhaltenssignale wie Mausbewegungen oder Scrolltiefe. Ein einfaches Durchlaufen einer Liste von Rechenzentrums-IPs wird diese Systeme nicht täuschen.

Wenn Sie bereits gelernt haben, wie man die Axios-Proxy-Rotation einrichtet, und dennoch blockiert werden, sollten Sie diese zusätzlichen Maßnahmen in Betracht ziehen:

  • Realistische HTTP-Header: Wechseln Sie User-Agent Zeichenfolgen und fügen Sie Header wie Accept-Language und Referer , die ein echter Browser senden würde. Die strategische Verwendung von Axios-Headern hilft, eine Erkennung zu vermeiden.
  • Vielfalt der TLS-Fingerabdrücke: Node.js erzeugt einen charakteristischen TLS-Fingerabdruck. Tools, die das TLS-Verhalten eines Browsers emulieren, können Ihre Erkennungsfläche verringern.
  • Privathaushalts-Proxy-Netzwerke: Diese leiten den Datenverkehr über echte IP-Adressen von Privathaushalten weiter, wodurch Anfragen praktisch nicht von normalem Nutzerverkehr zu unterscheiden sind. Sie kosten mehr als Rechenzentrums-Proxys, sind aber weitaus effektiver gegen aggressive Erkennung.

Fehlerbehebung bei häufigen Proxy-Fehlern

Selbst eine korrekte Axios-Proxy-Konfiguration kann zur Laufzeit fehlschlagen. Hier sind die Fehler, auf die Sie am häufigsten stoßen werden, und was Sie dagegen tun können:

  • ECONNREFUSED: Axios kann den Proxy überhaupt nicht erreichen. Überprüfen Sie die host und port , stellen Sie sicher, dass der Proxy-Server läuft, und prüfen Sie, ob keine Firewall die Verbindung blockiert.
  • 407 Proxy-Authentifizierung erforderlich: Der Proxy hat Ihre Anmeldedaten abgelehnt. Überprüfen Sie Ihre auth.username und auth.password korrekt sind und prüfen Sie, ob Ihr Provider die Anmeldedaten aktualisiert hat oder diese abgelaufen sind.
  • Timeouts und hängende Anfragen: Manche Proxys akzeptieren die Verbindung, antworten aber nie. Setzen Sie in Ihrer Axios-Konfiguration immer einen timeout in Ihrer Axios-Konfiguration fest, damit Ihr Skript schnell fehlschlägt. Ein tiefgreifendes Verständnis von Proxy-Statusfehlern kann Ihnen stundenlange Debugging-Arbeit ersparen.
  • VPN-Konflikte: Der Betrieb eines VPNs bei gleichzeitiger Weiterleitung über einen Proxy kann zu unerwartetem Verhalten führen, einschließlich Datenverkehr, der den falschen Weg nimmt, oder Verbindungen, die vollständig fehlschlagen. Das Hinzufügen eines Proxys zusätzlich zu einem VPN ist in der Regel überflüssig, es sei denn, Sie benötigen ausdrücklich eine IP-Rotation in einer anderen Region.
  • X-Forwarded-For Offenlegung Ihrer echten IP: Einige Proxys fügen Ihre ursprüngliche IP an diesen Header an. Elite- oder Hochanonymitäts-Proxys entfernen sie; überprüfen Sie daher den Anonymitätsgrad Ihres Proxys, wenn die IP-Verschleierung wichtig ist.

Wichtige Erkenntnisse

  • Der einfachste Weg, einen Axios-Proxy einzurichten, ist die Übergabe eines proxy Objekt mit host und port an eine beliebige Anfragekonfiguration übergeben. Die Authentifizierung fügt ein auth Unterobjekt mit username und password.
  • Verwenden axios.create() für einen sitzungsweiten Proxy und Überschreiben mit pro Anfrage proxy oder proxy: false , wenn Sie Flexibilität benötigen.
  • Erstellen Sie für das Scraping in der Produktion einen Proxy-Pool und binden Sie diesen in Axios-Interceptors ein, damit die Wiederholungslogik aus Ihrem Geschäftslogik-Code herausgehalten wird.
  • SOCKS5-Proxys erfordern socks-proxy-agent über httpAgent/httpsAgent, wobei die integrierte proxy auf false.
  • Stellen Sie immer einen timeout bei Proxy-Anfragen. Hängende Proxys bringen Ihre gesamte Pipeline stillschweigend zum Stillstand.

FAQ

Unterstützt Axios SOCKS5-Proxys nativ?

Nein. Das integrierte proxy Konfigurationsobjekt verarbeitet nur HTTP- und HTTPS-Proxys. Für SOCKS5 installieren Sie das socks-proxy-agent Paket und übergeben Sie den resultierenden Agenten an httpAgent und httpsAgent in der Anforderungskonfiguration. Setzen Sie proxy: false , um Konflikte mit dem integrierten Proxy-Handler zu vermeiden.

Wie deaktiviere ich den Proxy für eine einzelne Axios-Anfrage?

Übergeben Sie proxy: false in der Request-Konfiguration für diesen spezifischen Aufruf. Dies überschreibt jeden über axios.create(). Dies ist nützlich für Anfragen an interne Dienste oder Localhost-Endpunkte, die nicht über den Proxy geleitet werden sollen.

Warum ignoriert Axios meine Proxy-Einstellungen, wenn Umgebungsvariablen gesetzt sind?

Axios liest HTTP_PROXY oder HTTPS_PROXY Umgebungsvariablen. Sie müssen diese in Node.js selbst mit new URL(process.env.HTTP_PROXY) und den resultierenden Host und Port manuell in die proxy Konfiguration einfügen.

Was ist der Unterschied zwischen Residential- und Datacenter-Proxys beim Scraping?

Rechenzentrumsproxys verwenden IPs von Cloud-Anbietern. Sie sind schnell, kostengünstig und in großen Mengen verfügbar, aber ihre IP-Bereiche sind bekannt und lassen sich von Websites leichter blockieren. Privathaushalts-Proxys verwenden IPs, die von Internetanbietern an echte Haushalte vergeben werden, wodurch sie schwerer zu erkennen, aber teurer und langsamer sind.

Wie kann ich testen, ob meine Axios-Anfrage tatsächlich über den Proxy läuft?

Senden Sie eine GET-Anfrage an https://httpbin.org/ip über Ihren konfigurierten Proxy. Vergleichen Sie das origin Feld in der Antwort mit der tatsächlichen IP-Adresse Ihres Computers. Wenn sie sich unterscheiden, ist der Proxy aktiv. Zur genaueren Überprüfung rufen Sie https://httpbin.org/headers auf, um sicherzustellen, dass die Request-Header den Erwartungen entsprechen.

Fazit

Das richtige Einrichten von Axios-Proxy-Verbindungen beginnt einfach (drei Konfigurationsfelder), wird aber komplexer, sobald Sie Authentifizierung, HTTPS-Tunneling, Rotationslogik, SOCKS5-Unterstützung und Fehlerbehandlung berücksichtigen. Die Muster in diesem Leitfaden decken alles ab, von schnellen Experimenten bis hin zu produktionsreifen Scraping-Pipelines.

Die wichtigste Erkenntnis: Die Proxy-Konfiguration ist nur die halbe Miete. Sie benötigen außerdem zuverlässige Proxys, sinnvolle Timeouts und eine Wiederholungslogik, die einen nicht mehr erreichbaren Endpunkt nicht übermäßig belastet. Wenn Sie diese Grundlagen richtig umsetzen, wird Ihr Axios-basierter Scraper wesentlich widerstandsfähiger sein.

Wenn die Verwaltung von Proxy-Pools, Rotation und Anti-Bot-Maßnahmen mehr Entwicklungszeit in Anspruch nimmt als die eigentliche Datenextraktion, übernimmt WebScrapingAPI die Proxy-Rotation, CAPTCHA-Lösung und Wiederholungslogik hinter einem einzigen Endpunkt, sodass Sie Ihren Axios-Code beibehalten und sich darauf konzentrieren können, was Sie mit den Daten tun.

Über den Autor
Suciu Dan, Mitbegründer @ WebScrapingAPI
Suciu DanMitbegründer

Suciu Dan ist Mitbegründer von WebScrapingAPI und verfasst praxisorientierte, auf Entwickler zugeschnittene Anleitungen zu den Themen Web-Scraping mit Python, Web-Scraping mit Ruby und Proxy-Infrastruktur.

Los geht’s

Sind Sie bereit, Ihre Datenerfassung zu erweitern?

Schließen Sie sich den über 2.000 Unternehmen an, die WebScrapingAPI nutzen, um Webdaten im Unternehmensmaßstab ohne zusätzlichen Infrastrukturaufwand zu extrahieren.