PHP-Proxy-Server: So richten Sie Proxys in PHP ein

Erfahren Sie, wie Sie einen PHP-Proxy-Server einrichten, um Web Scraping zu verbessern, Sicherheit zu gewährleisten und Geoblocking zu überwinden.
3 min read
PHP Proxy Server How to Set Up Proxies in PHP

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_proxymod_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_contentsund 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:

Bright Data-Privatanwender-Proxy-Konfiguration

Hier können Sie den Proxy konfigurieren, indem Sie beispielsweise zwischen Dedizierte und Geteilte Proxys wählen:

Auswahl der Proxy-Konfiguration:

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:

Bright Data-Anmeldeinformationen:

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-ZugriffsparameternIhr-Benutzernameund Ihr-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:

Ergebnisse von gescrapten Daten aus Wikipedia mithilfe von Bright Data

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.