Bei der Verbindung zu einem Netzwerk dient eine IP-Adresse als eindeutige Kennung, die die Kommunikation und Identifizierung innerhalb dieses Netzwerks und im Internet erleichtert. Ein Proxy-Server fungiert als Vermittler zwischen dem Gerät eines Benutzers und dem Internet. Er erhöht die Sicherheit, den Datenschutz und die Leistung, indem er Anfragen verwaltet und die IP-Adresse des Benutzers verbirgt.
Proxy-Server gewährleisten Anonymität und helfen, Bedrohungen herauszufiltern, indem sie Ihre IP-Adresse maskieren und den Zugriff auf Websites kontrollieren. Gerade beim Web Scraping spielen Proxy-Server eine entscheidende Rolle, denn sie helfen Nutzern, IP-Sperren zu umgehen und Geoblocking-Maßnahmen zu verhindern.
In diesem Tutorial erfahren Sie mehr über Proxys und wie Sie einen Proxy-Server für Web Scraping in PHP einrichten.
Verwendung eines Proxy-Servers in PHP
Wenn Sie einen Proxy-Server einrichten möchten, gibt es verschiedene Möglichkeiten, dies zu tun. Sie können Server-Anwendungen wie Apache oder Nginx als Forward-Proxy-Server verwenden oder sich für dedizierte Proxy-Tools wie Squid entscheiden. In diesem Tutorial verwenden Sie Apache als Proxy-Server.
Um einen Proxyserver für Web Scraping in PHP einzurichten, müssen Sie sicherstellen, dass PHP auf Ihrem System installiert ist. Wenn Sie es noch nicht installiert haben, folgen Sie dazu der offiziellen Dokumentation . Dieser Artikel verwendet Ubuntu als Betriebssystem.
Einrichtung eines Proxy-Servers mit Apache
In Apache können die Module mod_proxy
, mod_proxy_http
und mod_proxy_connect
verwendet werden, damit Apache als Proxy-Server fungiert.
Um den Proxy-Server einzurichten, müssen Sie zunächst die Module aktivieren:
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_connect
Dann müssen Sie eine neue VirtualHost
-Datei erstellen, in der Sie den Proxy-Server definieren:
cd /etc/apache2/sites-available/
sudo cp 000-default.conf proxy.conf
Fügen Sie in der proxy.conf
-Datei den folgenden Code ein:
<VirtualHost *:80>
ServerName localhost
ServerAdmin admin@localhost
<IfModule mod_ssl.c>
SSLEngine off
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
In diesem Code ermöglicht ProxyRequests On
Apache, ein Forward-Proxy-Server zu sein. ProxyVia On
fügt einen Via
-Header hinzu, der hilft, den Anfragepfad in einer Kette von Proxys zu überprüfen. Außerdem legt der Kontrollblock <Proxy>
fest, wer auf den Proxy zugreifen darf. Jeder Host darf auf den Proxy-Server zugreifen.
Weitere Informationen finden Sie in den offiziellen Dokumenten.
Um die Einrichtung des Proxy-Servers abzuschließen, aktivieren Sie den VirtualHost
:
sudo a2ensite proxy.conf
service apache2 reload
Verwendung des Proxy-Servers
Im folgenden Abschnitt erfahren Sie, wie Sie den Proxy-Server im PHP-Code verwenden. Normalerweise bietet jedes Webanfrage- oder Automatisierungs-Framework einen Mechanismus zum Einrichten von Proxys. In diesem Artikel erfahren Sie mehr über drei Methoden: curl, file_get_contents
und Symfony BrowserKit.
Einstellung von Proxys in cURL
Die erste Methode, die Sie kennenlernen werden, zeigt Ihnen, wie Sie mit der cURL
-Bibliothek, einem leistungsstarken Tool für HTTP-Anfragen, Proxys in Ihr PHP-Skript integrieren.
Erstellen Sie eine Datei mit dem Namen curl.php
mit dem folgenden Code:
<?php
$proxyUrl = 'http://localhost:80';
$targetUrl = 'https://httpbin.org/get';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $targetUrl);
curl_setopt($ch, CURLOPT_PROXY, $proxyUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'cURL Error: ' . curl_error($ch);
} else {
echo $response;
}
curl_close($ch);
Dieses Skript initiiert eine cURL-Sitzung, legt die Ziel-URL und die Proxy-URL mit curl_setopt
fest und führt die Sitzung aus, um die Antwort abzurufen. Mit der Option CURLOPT_PROXY
wird der Proxy festgelegt. Die Proxy-URL ist auf localhost:80
gesetzt, wodurch der Proxy genutzt wird, den Sie im vorherigen Schritt erstellt haben.
Der Einfachheit halber enthält das Skript auch Optionen zum Deaktivieren der SSL-Verifizierung. Achten Sie jedoch darauf, in einer Produktionsumgebung Vorsicht walten zu lassen. Alle während der Ausführung aufgetretenen cURL-Fehler werden zu Debugging-Zwecken angezeigt.
Führen Sie das Skript mit dem Befehl php curl.php
aus.
Nachdem Sie das Skript ausgeführt haben, können Sie die Apache-Zugriffsprotokolldatei überprüfen, um die Anfrage an den Proxy zu verfolgen. Die Zugriffsprotokolldatei befindet sich normalerweise unter /var/log/httpd/access.log
.
In dieser Protokolldatei finden Sie einen Eintrag, der das CONNECT
-Protokoll verwendet, das dem ausgeführten Skript entspricht und angibt, dass die Anfrage erfolgreich verarbeitet wurde, mit einem HTTP-Statuscode von 200:
127.0.0.1 - - [21/Dec/2023:12:34:56 +0530] "CONNECT httpbin.org:443 HTTP/1.1" 200 -
Einstellung von Proxys in file_get_contents
Sie können auch file_get_contents
verwenden, um Proxys in PHP einzurichten und dann den Apache-Proxy zum Abrufen von Inhalten zu nutzen.
Erstellen Sie dazu eine file_get_contents.php
-Datei und fügen Sie den folgenden Code hinzu:
<?php
$options = [
'http' => [
'proxy' => 'tcp://127.0.0.1:80',
'request_fulluri' => true,
],
];
$context = stream_context_create($options);
$response = file_get_contents('https://httpbin.org/get', false, $context);
if ($response === false) {
echo "Failed to retrieve data from $url";
} else {
echo $response;
}
Dieser PHP-Code initiiert eine HTTP-Anfrage, um die Daten von http://wikipedia.org
mithilfe eines angegebenen Proxy-Servers abzurufen. Die Proxy-Server-Details sind im Array $options
konfiguriert, wobei der „Proxy“-Schlüssel die Server-Adresse definiert („tcp: //127.0.0. 1:80“) und request_fulluri
auf „true“ gesetzt ist, wodurch der Anfrage-URI als vollständiger URI behandelt wird.
Ein Stream-Kontext, der diese Optionen hinzufügt, wird mit stream_context_create
erstellt. Die eigentliche HTTP-Anfrage wird mit file_get_contents
gestellt, wodurch der erstellte Kontext hinzugefügt und der Inhalt von HttpBin
abgerufen wird.
Einstellung von Proxys in Symfony BrowserKit
Wenn Sie ein Symfony-Benutzer sind, ist die Integration von Proxys mit BrowserKit einfach.
Wenn Sie mitmachen möchten und Symfony noch nicht installiert haben, sollten Sie es jetzt installieren..
Sobald Symfony eingerichtet ist, können Sie problemlos Proxys in Ihrem PHP-Code verwenden:
<?php
require './vendor/autoload.php';
use Symfony\Component\BrowserKit\HttpBrowser;
use Symfony\Component\HttpClient\HttpClient;
$proxyServer = 'http://127.0.0.1';
$proxyPort = '80';
$client = new HttpBrowser(HttpClient::create(['proxy' => sprintf('%s:%s', $proxyServer, $proxyPort)]));
$client->request('GET', 'https://httpbin.org/get');
$content = $client->getResponse()->getContent();
echo $content;
Dieser Codeblock verwendet Symfony BrowserKit und HttpClient
, um eine GET
-Anfrage an HttpBin
über den unter $proxyUrl
konfigurierten Apache-Proxy zu stellen. Dann wird der Antwortinhalt abgerufen und angezeigt. Die HttpBrowser
-Instanz ist mit den angegebenen Proxy-Einstellungen eingerichtet, was es einfach macht, Proxys in Symfony-Anwendungen zu integrieren.
Einschränkungen herkömmlicher Proxy-Integrationsmethoden
Obwohl die Konfiguration von Proxys in PHP einfach zu sein scheint, sind die verschiedenen Methoden mit gewissen Einschränkungen verbunden. Es ist zwar möglich, manuell zwischen verschiedenen Proxys zu wechseln, aber das ist ein ineffizienter Ansatz, wenn Sie große Datenmengen auslesen.
Außerdem bieten diese Methoden keinen Mechanismus, um automatisch zu einem alternativen Proxy zu wechseln, wenn der Proxy nicht verfügbar ist, die IP eingeschränkt wird oder Probleme auftreten. Dies führt zu Betriebsunterbrechungen oder Fehlern beim Datenabruf, die ein manuelles Eingreifen erfordern. Sie könnten zwar Code schreiben, um die Proxys automatisch zu wechseln, aber das ist ein komplizierter Prozess, und Sie müssen mehrere Proxy-Server in verschiedenen geografischen Regionen einrichten oder mieten, um maximale Sicherheit zu gewährleisten.
Die gute Nachricht ist, dass Bright Data helfen kann.
Der Bright Data-Proxy-Server
Bright Data ist eine Plattform zur Extraktion von Webdaten, die Tools für Web-Scraping und Datenerfassung in großem Maßstab bietet. Die robuste Sammlung weltweiter Proxy-Server von Bright Data verschafft Ihnen zum Beispiel Zugriff auf verschiedene IP-Adressen, mit denen Sie Geoblocking und IP-Sperren überwinden können.
Darüber hinaus können Ihnen die On-Demand-Proxys von Bright Data dabei helfen, die benötigten Ressourcen dynamisch zu erwerben, wenn sie benötigt werden. Dies ist hilfreich in Web-Scraping-Szenarien, in denen Ihre Anforderungen schwanken, um eine optimale Leistung und Reaktionsfähigkeit zu gewährleisten. Bright Data bietet verschiedene Arten von Proxys an (d. h. Privatanwender-Proxys, Rechenzentrums-Proxys, IDA-Proxys und mobile Proxys), die sicherstellen, dass Sie den Proxy haben, der am besten zu Ihrem Anwendungsfall passt.
Einer der Hauptvorteile der Bright Data-Lösung ist die automatisierte Proxy-Rotation, die zu einer erhöhten Anonymität beiträgt und das Erkennungsrisiko bei Web-Scraping-Aktivitäten mindert. Diese Funktion in Verbindung mit dem Zugang zu einem fortschrittlichen Proxy-Netzwerk im Rechenzentrum mit über 770.000 IPs weltweit macht Bright Data zu einer hervorragenden Wahl für Web Scraping.
Verwendung des Bright Data-Proxys mit PHP
Die Verwendung von Bright Data ist einfach. Alles was Sie tun müssen, ist sich für ein kostenloses Konto anzumelden.
Nachdem Sie ein Konto erstellt haben, klicken Sie in der Seitenleiste auf Proxys und Scraping-Infrastruktur und wählen Sie dann Erste Schritte unter Privanwender-Proxys aus:
Hier können Sie den Proxy konfigurieren, indem Sie beispielsweise zwischen Dedizierte und Geteilte Proxys wählen:
Nachdem Sie Ihre Proxy-Konfiguration ausgewählt haben, aktivieren Sie den Proxy-Service, indem Sie auf Speichern klicken. Bright Data stellt Ihnen einmalige Anmeldeinformationen zur Verfügung:
Mit Ihren Bright Data-Proxy-Details können Sie den Bright Data-Proxy verwenden, um Wikipedia zu scrapen. Erstellen Sie zunächst eine scrape.php
-Datei und fügen Sie den folgenden Code hinzu:
<?php
// BrightData proxy details
$proxyUrl = 'Your-proxy-url-from-the access-paramaters';
$proxyUser = 'Your-username:Your-password';
$targetUrl = 'https://en.wikipedia.org/wiki/Proxy_server';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $targetUrl);
curl_setopt($ch, CURLOPT_PROXY, $proxyUrl);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyUser);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'cURL Error: ' . curl_error($ch);
} else {
$dom = new DOMDocument();
@$dom->loadHTML($response);
$content = $dom->getElementById('mw-content-text')->textContent;
$headings = [];
$headingsNodeList = $dom->getElementsByTagName('h2');
foreach ($headingsNodeList as $heading) {
$headings[] = $heading->textContent;
}
$headingsNodeList = $dom->getElementsByTagName('h3');
foreach ($headingsNodeList as $heading) {
$headings[] = $heading->textContent;
}
echo "Content:\n";
echo $content . "\n\n";
echo "Headings:\n";
foreach ($headings as $index => $heading) {
echo ($index + 1) . ". $heading\n";
}
}
curl_close($ch);
Stellen Sie sicher, dass Sie
Ihre-Proxy-Url-von-den-Zugriffsparametern
,Ihr-Benutzername
undIhr-Passwort
durch Ihre spezifischen Anmeldedaten ersetzen.
In diesem Code werden die Proxy-Details in die cURL-Anfrage integriert, um sicherzustellen, dass das Web Scraping über das Bright Data-Proxy-Netzwerk erfolgt.
Führen Sie als Nächstes php scrape.php
in Ihrem Terminal aus. Hier sind die gescrapten Ergebnisse:
Um zu bestätigen, dass Ihre Anfragen jetzt über den Bright Data-Proxy weitergeleitet werden, können Sie versuchen, eine GET-Anfrage an http://lumtest.com/myip.json zu senden. Wenn Sie diese in Ihrem Browser öffnen, antwortet dieser mit einem JSON-Objekt, das die Angaben zu Ihrem lokalen IDA enthält.
Um dies mit einem Bright Data-Proxy auszuprobieren, speichern Sie den folgenden Code in einer neuen PHP-Datei und führen Sie ihn aus:
<?php
// BrightData proxy details
$proxyUrl = 'brd.superproxy.io:22225';
$proxyUser = 'brd-customer-hl_0c2320f1-zone-residential_proxy1:j30hm0h2pqde';
$targetUrl = 'http://lumtest.com/myip.json';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $targetUrl);
curl_setopt($ch, CURLOPT_PROXY, $proxyUrl);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyUser);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'cURL Error: ' . curl_error($ch);
} else {
echo $response;
}
curl_close($ch);
Die Ausgabe sollte den Standort und andere Details des verwendeten Proxys anzeigen:
{"ip":"91.66.16.153","country":"DE","asn":{"asnum":3209,"org_name":"Vodafone GmbH"},"geo":{"city":"Berlin","region":"BE","region_name":"Land Berlin","postal_code":"12205","latitude":52.428,"longitude":13.3095,"tz":"Europe/Berlin","lum_city":"berlin","lum_region":"be"}}
Dies bestätigt, dass die Anfrage tatsächlich über die Bright Data-Proxy-Server weitergeleitet wird.
Fazit
In diesem Tutorial haben Sie verschiedene Methoden kennengelernt, um einen Proxy-Server in PHP einzurichten. Lokale Proxy-Server mit Apache sind zwar eine Option, aber die Nutzung der Bright Data-Proxy-Server bietet ein neues Maß an Effizienz und Vielseitigkeit.
Die Bright Data-Proxy-Server bieten Ihnen ein umfassendes globales Proxy-Netzwerk, das den Zugriff auf eine Vielzahl von IP-Adressen gewährleistet, darunter Privatanwneder-, IDA-, Rechenzentrums- und mobile Proxys. Darüber hinaus trägt die Bright Data-Proxy-Rotation zu einer erhöhten Anonymität und zur Minderung von Erkennungsrisiken bei Web-Scraping-Aktivitäten bei.
Ganz gleich, ob Sie ein Anfänger sind, der Einfachheit sucht, oder ein erfahrener Entwickler, der fortgeschrittene Funktionen benötigt, die Bright Data-Proxy-Server bieten eine solide Grundlage für erfolgreiche und effiziente Web-Scraping-Aktivitäten.
Keine Kreditkarte erforderlich