Ein HTTP-Proxy ist ein Vermittlungsserver, der zwischen Ihrer Node.js-Anwendung und dem Zielserver sitzt und Anfragen und Antworten weiterleitet. Die Verwendung von Proxys in Node.js mit Bibliotheken wie axios, Puppeteer und Playwright ermöglicht es Ihnen, Ihre IP-Adresse zu maskieren, geografische Beschränkungen zu umgehen, Anfragen zu verteilen (Load Balancing) und Websites effektiver zu scrapen. Dieser Artikel bietet praktische Beispiele, wie Sie diese Bibliotheken für die Verwendung von Proxys konfigurieren können.
Konfigurieren von Proxys mit Axios
Axios ist ein beliebter, Promise-basierter HTTP-Client für Node.js. Die Konfiguration eines Proxys mit Axios ist unkompliziert und erfolgt über die Konfigurationsoption proxy.
Grundlegende Proxy-Konfiguration
Die Option proxy akzeptiert ein Objekt mit Eigenschaften wie host, port, username und password.
const axios = require('axios');
async function fetchData() {
try {
const response = await axios.get('https://api.example.com/data', {
proxy: {
host: 'your_proxy_host',
port: 8080,
username: 'your_username', // Optional
password: 'your_password' // Optional
}
});
console.log(response.data);
} catch (error) {
console.error('Error fetching data:', error);
}
}
fetchData();
Ersetzen Sie your_proxy_host und 8080 durch Ihren tatsächlichen Proxy-Host und Port. Wenn Ihr Proxy eine Authentifizierung erfordert, geben Sie username und password an.
Verwenden von Umgebungsvariablen
Aus Gründen der Sicherheit und Wartbarkeit ist es am besten, Proxy-Anmeldeinformationen in Umgebungsvariablen zu speichern.
const axios = require('axios');
async function fetchData() {
try {
const proxyHost = process.env.PROXY_HOST;
const proxyPort = process.env.PROXY_PORT;
const proxyUsername = process.env.PROXY_USERNAME;
const proxyPassword = process.env.PROXY_PASSWORD;
const response = await axios.get('https://api.example.com/data', {
proxy: {
host: proxyHost,
port: parseInt(proxyPort), // Ensure port is an integer
username: proxyUsername,
password: proxyPassword
}
});
console.log(response.data);
} catch (error) {
console.error('Error fetching data:', error);
}
}
fetchData();
Stellen Sie sicher, dass die Umgebungsvariablen vor dem Ausführen des Skripts gesetzt sind. Zum Beispiel in Ihrem Terminal:
export PROXY_HOST=your_proxy_host
export PROXY_PORT=8080
export PROXY_USERNAME=your_username
export PROXY_PASSWORD=your_password
node your_script.js
Handhabung von HTTPS-Proxys
Stellen Sie bei HTTPS-Proxys sicher, dass Ihr Proxy die CONNECT-Methode unterstützt. Axios verarbeitet HTTPS-Proxys nahtlos mit der gleichen Konfiguration.
Konfigurieren von Proxys mit Puppeteer
Puppeteer ist eine Node.js-Bibliothek, die eine High-Level-API zur Steuerung von headless Chrome oder Chromium bietet. Die Verwendung von Proxys mit Puppeteer ist entscheidend für Web-Scraping- und Automatisierungsaufgaben, bei denen Sie IP-Sperren vermeiden oder auf geografisch eingeschränkte Inhalte zugreifen müssen.
Starten von Puppeteer mit einem Proxy
Sie können einen Proxy beim Starten von Puppeteer über das Startargument --proxy-server konfigurieren.
const puppeteer = require('puppeteer');
async function scrapeWebsite() {
const browser = await puppeteer.launch({
args: [
`--proxy-server=http://${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`
]
});
const page = await browser.newPage();
await page.goto('https://www.example.com');
console.log(await page.title());
await browser.close();
}
scrapeWebsite();
Ersetzen Sie process.env.PROXY_HOST und process.env.PROXY_PORT durch Ihren Proxy-Host und Port. Beachten Sie, dass dieses Beispiel einen HTTP-Proxy annimmt; für HTTPS-Proxys verwenden Sie https:// im Argument --proxy-server.
Authentifizierte Proxys mit Puppeteer
Puppeteer unterstützt die Authentifizierung mit Benutzername und Passwort nicht direkt über Startargumente. Sie müssen die Authentifizierung innerhalb des Seitenkontexts handhaben.
const puppeteer = require('puppeteer');
async function scrapeWebsite() {
const browser = await puppeteer.launch({
args: [
`--proxy-server=http://${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`
]
});
const page = await browser.newPage();
// Authenticate with the proxy using page.authenticate
await page.authenticate({
username: process.env.PROXY_USERNAME,
password: process.env.PROXY_PASSWORD,
});
await page.goto('https://www.example.com');
console.log(await page.title());
await browser.close();
}
scrapeWebsite();
Die Methode page.authenticate() stellt die erforderlichen Anmeldeinformationen für den Proxy-Server bereit. Diese Methode muss vor dem Navigieren zur Zielseite aufgerufen werden.
Überlegungen zum Proxy pro Anfrage
Puppeteer wendet die Proxy-Einstellung global für die gesamte Browser-Instanz an. Wenn Sie verschiedene Proxys für verschiedene Anfragen benötigen, müssen Sie mehrere Browser-Instanzen starten, die jeweils mit einem anderen Proxy konfiguriert sind. Alternativ können Sie eine Bibliothek verwenden, die Anfragen abfängt und Proxy-Einstellungen pro Anfrage anwendet (weniger verbreitet, komplexer).
Konfigurieren von Proxys mit Playwright
Playwright ist eine weitere leistungsstarke Node.js-Bibliothek für die Browserautomatisierung und End-to-End-Tests. Wie Puppeteer unterstützt sie die Konfiguration von Proxys für ihre Browser-Instanzen.
Starten von Playwright mit einem Proxy
Playwright bietet eine direktere Möglichkeit zur Konfiguration von Proxys im Vergleich zu Puppeteer, indem die proxy-Eigenschaft in den launch-Optionen verwendet wird.
const { chromium } = require('playwright');
async function scrapeWebsite() {
const browser = await chromium.launch({
proxy: {
server: `http://${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`,
username: process.env.PROXY_USERNAME,
password: process.env.PROXY_PASSWORD,
}
});
const page = await browser.newPage();
await page.goto('https://www.example.com');
console.log(await page.title());
await browser.close();
}
scrapeWebsite();
Dieser Ansatz ist sauberer und expliziter, da er die Authentifizierung mit Benutzername und Passwort direkt innerhalb der Proxy-Konfiguration unterstützt.
Proxy pro Kontext
Playwright unterstützt Browser-Kontexte, die isolierte Browsing-Sitzungen innerhalb einer einzigen Browser-Instanz ermöglichen. Jeder Kontext kann seine eigene Proxy-Konfiguration haben. Dies ist nützlich für die Ausführung paralleler Aufgaben, jede mit einem anderen Proxy.
const { chromium } = require('playwright');
async function scrapeWebsite() {
const browser = await chromium.launch();
const context = await browser.newContext({
proxy: {
server: `http://${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`,
username: process.env.PROXY_USERNAME,
password: process.env.PROXY_PASSWORD,
}
});
const page = await context.newPage();
await page.goto('https://www.example.com');
console.log(await page.title());
await browser.close();
}
scrapeWebsite();
Vergleichstabelle: Proxy-Konfiguration
| Feature | Axios | Puppeteer | Playwright |
|---|---|---|---|
| Konfiguration | proxy-Option in der Anfragekonfiguration |
--proxy-server Startargument, page.authenticate() |
proxy-Option in launch oder newContext |
| Authentifizierung | username und password in proxy |
page.authenticate() |
username und password in proxy |
| HTTPS-Unterstützung | Ja, gleiche Konfiguration wie HTTP | Ja, https:// in --proxy-server verwenden |
Ja, gleiche Konfiguration wie HTTP |
| Proxy pro Anfrage | Nein, global für die Axios-Instanz | Nein, global für die Browser-Instanz | Ja, über Browser-Kontexte |
Best Practices
- Umgebungsvariablen verwenden: Speichern Sie Proxy-Anmeldeinformationen in Umgebungsvariablen, um sie nicht fest in Ihrem Code zu hinterlegen.
- Fehlerbehandlung: Implementieren Sie eine Fehlerbehandlung, um Proxy-Verbindungsprobleme elegant zu verwalten.
- Proxys rotieren: Rotieren Sie Proxys für Web-Scraping häufig, um IP-Sperren zu vermeiden. Erwägen Sie die Verwendung eines Proxy-Pools.
- Setup testen: Überprüfen Sie, ob Ihr Proxy korrekt funktioniert, indem Sie Ihre IP-Adresse über den Proxy überprüfen. Verwenden Sie Websites wie whatismyipaddress.com{rel="nofollow"}.
- Sichere Proxys: Verwenden Sie sichere Proxys (HTTPS oder SOCKS5), um Ihren Datenverkehr zu verschlüsseln.
- Rechtliche Aspekte: Stellen Sie sicher, dass Ihre Web-Scraping-Aktivitäten den Nutzungsbedingungen der Zielwebsite und allen geltenden Gesetzen entsprechen.
Fazit
Die Konfiguration von Proxys in Node.js mit Bibliotheken wie axios, Puppeteer und Playwright ist für verschiedene Aufgaben unerlässlich, darunter Web-Scraping, das Umgehen von geografischen Beschränkungen und die Verbesserung der Privatsphäre. Jede Bibliothek bietet unterschiedliche Ansätze zur Proxy-Konfiguration, wobei Playwright die flexibelste und direkteste Methode bietet, insbesondere für authentifizierte Proxys und Konfigurationen pro Kontext. Durch die Befolgung der in diesem Artikel beschriebenen Best Practices können Sie Proxys effektiv in Ihren Node.js-Anwendungen nutzen.