Am Ende dieses Leitfadens zur Laravel-Proxy-Integration werden Sie alles verstanden haben:
- Was Proxies sind und wie sie in Laravel funktionieren
- Wann und warum Sie sie brauchen könnten
- Wie Sie einen Proxy in Ihrem Laravel-Projekt einrichten
- Umgang mit Proxy-Authentifizierung, SSL-Zertifikatsproblemen und IP-Rotation in Laravel
- So integrieren Sie einen Proxy in die
HttpClient-Komponente
von Symfony
Lasst uns eintauchen!
Was ist ein Laravel-Proxy?
Ein Laravel-Proxy fungiert als Vermittler zwischen Ihrem Laravel-Backend und einem externen Server. Er ermöglicht es Ihnen, den Datenverkehr Ihres Servers programmatisch über einen Proxy-Server zu leiten, um Ihre IP-Adresse zu verbergen.
Im Folgenden wird beschrieben, wie ein Proxy in Laravel funktioniert:
- Laravel sendet eine HTTP-Anfrage unter Verwendung einer HTTP-Client-Bibliothek mit einem konfigurierten Proxy.
- Die Anfrage läuft über den Proxyserver.
- Der Proxy leitet sie an den Zielserver weiter.
- Der Zielserver antwortet dem Proxy.
- Der Proxy gibt dann die Antwort an Laravel zurück.
Dadurch sieht der Zielserver, dass die Anfrage von der IP des Proxys kommt – und nicht von der Ihres Laravel-Servers. Dieser Mechanismus hilft, geografische Beschränkungen zu umgehen, die Anonymität zu verbessern und Ratenbeschränkungen zu verwalten.
Anwendungsfälle für Proxies in Laravel
Proxies in Laravel sind in vielen Szenarien nützlich, aber diese drei sind die häufigsten:
- Web-Scraping: Verwenden Sie Proxys, um IP-Sperren, Ratenbeschränkungen oder andere Sperren beim Aufbau einer Web-Scraping-API zu vermeiden. Weitere Informationen finden Sie in unserem Tutorial über Web Scraping mit Laravel.
- Umgehung von Ratenbeschränkungen für APIs von Drittanbietern: Rotieren Sie Proxy-IPs, um die API-Nutzungsquoten einzuhalten und Drosselungen zu vermeiden.
- Zugriff auf geografisch eingeschränkte Inhalte: Wählen Sie Proxyserver in bestimmten Regionen, um auf Dienste zuzugreifen, die nur in bestimmten Ländern verfügbar sind.
Weitere Beispiele finden Sie in unserem Leitfaden zu Webdaten und Proxy-Anwendungsfällen.
Verwendung eines Proxys in Laravel: Schritt-für-Schritt-Anleitung
In diesem Abschnitt zeigen wir, wie man einen Proxy in Laravel integriert, indem man den Standard-HTTP-Client verwendet. Wenn Sie ein Benutzer von Symfony HttpClient
sind, machen Sie sich keine Sorgen – wir werden die Proxy-Integration mit dieser Bibliothek später in diesem Artikel behandeln.
Hinweis: Der HTTP-Client von Laravel basiert auf Guzzle, daher sollten Sie sich unsere Anleitung zur Integration des Guzzle-Proxys ansehen.
Um die Integration zu demonstrieren, erstellen wir einen GET
/api/v1/get-ip
Endpunkt, der:
- Sendet eine
GET-Anfrage
anhttps://httpbin.io/ip
unter Verwendung des konfigurierten Proxys. - Ruft die IP-Adresse des Ausgangs aus der Antwort ab.
- Gibt diese IP an den Client zurück, der den Laravel-Endpunkt aufruft.
Wenn alles richtig eingerichtet ist, stimmt die von dieser API zurückgegebene IP mit der IP des Proxys überein.
Fangen wir an!
Schritt 1: Projekt einrichten
Wenn Sie bereits eine Laravel-Anwendung eingerichtet haben, können Sie diesen Schritt überspringen und mit Schritt Nr. 2 fortfahren.
Andernfalls folgen Sie den nachstehenden Anweisungen, um ein neues Laravel-Projekt zu erstellen. Öffnen Sie Ihr Terminal und führen Sie den folgenden Composer-Befehl create-command
aus, um ein neues Laravel-Projekt zu initialisieren:
composer create-project laravel/laravel laravel-proxies-application
Mit diesem Befehl wird ein neues Laravel-Projekt in einem Ordner namens laravel-proxies-application
erstellt. Öffnen Sie diesen Ordner in Ihrer bevorzugten PHP-IDE.
Zu diesem Zeitpunkt sollte der obige Ordner die Standard-Laravel-Dateistruktur enthalten:
Wunderbar! Sie haben jetzt ein Laravel-Projekt eingerichtet.
Schritt Nr. 2: Definieren Sie den Test-API-Endpunkt
Führen Sie im Projektverzeichnis den folgenden Artisan-Befehl aus, um einen neuen Controller zu erstellen:
php artisan make:controller IPController
Dadurch wird eine Datei namens IPController.php
im Verzeichnis /app/Http/Controllers
mit diesem Standardinhalt erstellt:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class IPController extends Controller
{
//
}
Fügen Sie nun die folgende getIP()
-Methode in IPController.php
ein:
public function getIP(): JsonResponse
{
// make a GET request to the "/ip" endpoint to get the IP of the server
$response = Http::get('https://httpbin.io/ip');
// retrieve the response data
$responseData = $response->json();
// return the response data
return response()->json($responseData);
}
Diese Methode verwendet den Http-Client
von Laravel, um Ihre IP-Adresse von https://httpbin.io/ip
abzurufen, und gibt sie als JSON zurück.
Vergessen Sie nicht, diese beiden Importe zu importieren:
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Http;
Da Ihre Laravel-Anwendung zustandslose APIs anbieten soll, aktivieren Sie das API-Routing mit dem Befehl install:api
Artisan:
php artisan install:api
Um diese Methode über einen API-Endpunkt bereitzustellen, fügen Sie die folgende Route in die Datei routes/api.php
ein:
use App\Http\Controllers\IPController;
Route::get('/v1/get-ip', [IPController::class, 'getIP']);
Ihr neuer API-Endpunkt wird unter folgender Adresse zugänglich sein:
/api/v1/get-ip
Hinweis: Beachten Sie, dass jede Laravel-API standardmäßig unter dem Pfad /api
verfügbar ist.
Zeit, den Endpunkt /api/v1/get-ip
zu testen!
Starten Sie den Laravel-Entwicklungsserver, indem Sie ihn ausführen:
php artisan serve
Ihr Server sollte jetzt lokal auf Port 8000
hören.
Stellen Sie eine GET-Anfrage
an den Endpunkt /api/v1/get-ip
mit cURL:
curl -X GET 'http://localhost:8000/api/v1/get-ip'
Hinweis: Unter Windows ersetzen Sie curl
durch curl.exe
. Erfahren Sie mehr in unserer Anleitung zum Senden von GET-Anfragen mit cURL.
Sie sollten eine Antwort ähnlich der folgenden erhalten:
{
"origin": "45.89.222.18"
}
Die obige Antwort ist genau die gleiche, die vom /ip-Endpunkt
von HttpBin erzeugt wird, was bestätigt, dass Ihre Laravel-API perfekt funktioniert. Insbesondere ist die angezeigte IP-Adresse die öffentliche IP Ihres Rechners. Als Nächstes müssen wir einen Proxy integrieren, um diese IP zu maskieren!
Schritt #3: Abrufen eines Proxys
Um einen Proxy in Ihrer Laravel-Anwendung zu verwenden, benötigen Sie zunächst Zugriff auf einen funktionierenden Proxy-Server.
Zwar bieten viele Websites kostenlose Proxy-URLs an, doch ist hier Vorsicht geboten – die Unterhaltung der Proxy-Infrastruktur ist kostspielig. Wenn ein Dienst kostenlose Proxys anbietet, sollten Sie sich fragen, wie er dies finanziert. Oft handelt es sich um fragwürdige Praktiken wie das Sammeln von Daten oder die Umleitung von Datenverkehr.
Hinweis: Kostenlose Proxys sollten ausschließlich zu Test- oder Schulungszwecken verwendet werden – niemals in Produktionsumgebungen.
Wenn Sie zuverlässige Proxys benötigen, sollten Sie sich für seriöse Anbieter entscheiden, die kostenlose Testversionen oder begrenzte kostenlose Tarife anbieten. Sie können zum Beispiel unsere kostenlosen Proxys ausprobieren.
Eine typische Proxy-URL sieht folgendermaßen aus:
<protocol>://<host>:<port>
Wo:
Protokoll
ist das Protokoll, das für die Verbindung mit dem Proxyserver erforderlich ist (z. B.http
,https
,socks5
)host
ist die IP-Adresse oder Domäne des Proxy-ServersPort
ist der für die Weiterleitung des Datenverkehrs verwendete Port
In diesem Beispiel nehmen wir an, dass Ihre Proxy-URL lautet:
http://66.29.154.103:3128
Speichern Sie diese in einer Variablen innerhalb der Methode getIP()
:
$proxyUrl = 'http://66.29.154.103:3128';
Zeit zu sehen, wie man einen Proxy mit Http
in Laravel verwenden!
Schritt 4: Integrieren Sie den Proxy in Http
Die Integration eines Proxys in Laravel unter Verwendung des Http-Clients
erfordert nur eine geringe zusätzliche Konfiguration:
$proxyUrl = 'http://66.29.154.103:3128';
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
$responseData = $response->json();
Wie Sie sehen können, müssen Sie nur die Proxy-URL als Option mit der Methode withOptions()
übergeben. Dadurch wird der HTTP-Client von Laravel angewiesen, die Anfrage unter Verwendung der Proxy-Option
von Guzzle über den angegebenen Proxy-Server zu leiten.
Erstaunlich! Laravel-Proxy-Integration abgeschlossen.
Schritt #5: Alles zusammenfügen
Ihre endgültige Laravel-API-Logik mit Proxy-Integration sollte nun wie folgt aussehen:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Http;
class IPController extends Controller
{
public function getIP(): JsonResponse
{
// the URL of the proxy server
$proxyUrl = 'http://66.29.154.103:3128'; // replace with your proxy URL
// make a GET request to /ip endpoint through the proxy server
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
// retrieve the response data
$responseData = $response->json();
// return the response data
return response()->json($responseData);
}
}
Testen Sie es, indem Sie Laravel lokal ausführen:
php artisan serve
Und stellen Sie erneut eine Verbindung zum Endpunkt /api/v1/get-ip
her:
curl -X GET 'http://localhost:8000/api/v1/get-ip'
Diesmal sollte die Ausgabe in etwa so aussehen:
{
"origin": "66.29.154.103"
}
Das Feld "Herkunft"
zeigt die IP-Adresse des Proxy-Servers an und bestätigt, dass Ihre tatsächliche IP-Adresse nun hinter dem Proxy verborgen ist.
Warnung: Kostenlose Proxyserver sind oft instabil oder kurzlebig. Zu dem Zeitpunkt, an dem Sie dies ausprobieren, funktioniert der Beispiel-Proxy möglicherweise nicht mehr. Ersetzen Sie bei Bedarf die $proxyUrl
durch eine derzeit aktive, bevor Sie testen.
Hinweis: Wenn bei der Anfrage SSL-Fehler auftreten, lesen Sie die Tipps zur Fehlerbehebung im Abschnitt “Erweiterte Anwendungsfälle” weiter unten.
Fortgeschrittene Anwendungsfälle
Sie haben soeben die Grundlagen der Proxy-Integration mit Laravel kennengelernt, aber es gibt noch weitere fortgeschrittene Szenarien zu berücksichtigen.
Proxy-Authentifizierung
Premium-Proxys erfordern oft eine Authentifizierung, damit nur autorisierte Benutzer darauf zugreifen können. Wenn Sie in diesem Fall nicht die richtigen Anmeldedaten angeben, erhalten Sie diese Fehlermeldung:
cURL error 56: CONNECT tunnel failed, response 407
Die URL eines authentifizierten Proxys hat in der Regel dieses Format:
<protocol>://<username>:<password>@<host>:<port>
Benutzername
und Passwort
sind Ihre Authentifizierungsdaten.
Die Http-Klasse
von Laravel (die unter der Haube auf Guzzle basiert) unterstützt vollständig authentifizierte Proxys. Sie brauchen also nicht viel zu ändern. Fügen Sie einfach die Authentifizierungsdaten direkt in die Proxy-URL ein:
$proxyUrl = '<protocol>://<username>:<password>@<host>:<port>';
Zum Beispiel:
// authenticated proxy with username and password
$proxyUrl = 'http://<username>:<password>@<host>:<port>';
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
Ersetzen Sie den Wert von $proxyUrl
durch eine gültige authentifizierte Proxy-URL.
Http
leitet den Datenverkehr nun an den konfigurierten authentifizierten Proxyserver weiter!
Vermeiden Sie Probleme mit SSL-Zertifikaten
Wenn Sie einen Proxy mit dem Http-Client
von Laravel einrichten, können Ihre Anfragen aufgrund von SSL-Zertifikatsprüfungsfehlern fehlschlagen:
cURL error 60: SSL certificate problem: self-signed certificate in certificate chain
Dies geschieht in der Regel, wenn der Proxy-Server ein selbstsigniertes SSL-Zertifikat verwendet.
Wenn Sie dem Proxyserver vertrauen und nur lokal oder in einer sicheren Umgebung testen, können Sie die SSL-Überprüfung wie folgt deaktivieren:
$response = Http::withOptions([
'proxy' => $proxyUrl,
'verify' => false, // disable SSL certificate verification
])->get('https://httpbin.io/ip');
Warnung: Die Deaktivierung der SSL-Überprüfung setzt Sie Man-in-the-Middle-Angriffen aus. Verwenden Sie diese Option daher nur in vertrauenswürdigen Umgebungen.
Andernfalls können Sie die Zertifikatsdatei des Proxyservers (z. B. proxy-ca.crt
) für die SSL-Verifizierung wie folgt verwenden:
$response = Http::withOptions([
'proxy' => $proxyUrl,
'verify' => storage_path('certs/proxy-ca.crt'), // Path to the CA bundle
])->get('https://httpbin.io/ip');
Vergewissern Sie sich, dass die Datei proxy-ca.crt
in einem sicheren und zugänglichen Verzeichnis gespeichert ist (z. B. storage/certs/
) und Laravel die Berechtigung hat, sie zu lesen.
Mit beiden Methoden sollte der durch den Proxy verursachte SSL-Überprüfungsfehler verschwinden.
Rotation des Bevollmächtigten
Wenn Sie immer wieder denselben Proxy-Server verwenden, wird die Ziel-Website wahrscheinlich irgendwann die IP-Adresse dieses Proxy-Servers erkennen und blockieren. Um dies zu vermeiden, können Sie Ihre Proxyserver wechseln undfür jede Anfrage einen anderen verwenden.
Dies sind die Schritte zum Drehen von Proxys in Laravel:
- Ein Array mit mehreren Proxy-URLs erstellen
- Zufällige Auswahl vor jeder Anfrage
- Setzen Sie den ausgewählten Proxy in der HTTP-Client-Konfiguration
Implementieren Sie das mit diesem Code:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Http;
function getRandomProxyUrl(): string
{
// a list of valid proxy URLs (replace with your proxy URLs)
$proxies = [
'<protocol_1>://<proxy_host_1>:<port_1>',
// ...
'<protocol_n>://<proxy_host_n>:<port_n>',
];
// return a proxy URL randomly picked from the list
return $proxies[array_rand($proxies)];
}
class IPController extends Controller
{
public function getIP(): JsonResponse
{
// the URL of the proxy server
$proxyUrl = getRandomProxyUrl();
// make a GET request to /ip endpoint through the proxy server
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
// retrieve the response data
$responseData = $response->json();
// return the response data
return response()->json($responseData);
}
}
Der obige Ausschnitt zeigt, wie man einen Proxy zufällig aus einer Liste auswählt, um eine Proxy-Rotation zu simulieren. Dieser Ansatz funktioniert zwar, hat aber einige Nachteile:
- Sie müssen einen Pool von zuverlässigen Proxyservern unterhalten, was oft mit Kosten verbunden ist.
- Für eine effektive Rotation muss der Proxy-Pool groß genug sein. Ohne einen großen Pool werden immer wieder dieselben Proxys verwendet, was zur Erkennung und Blockierung führen kann.
Um diese Einschränkungen zu umgehen, sollten Sie das rotierende Proxy-Netzwerk von Bright Data nutzen. Diese Infrastruktur rotiert automatisch IP-Adressen in Ihrem Namen und ermöglicht Ihnen den Zugang zu:
- 1500M+ IPs in 195 Ländern
- Proxys für Privathaushalte, Rechenzentren, ISPs und Mobiltelefone
- Hohe Betriebszeit und eine Erfolgsquote von 99,9
Im nächsten Abschnitt zeigen wir Ihnen, wie Sie die rotierenden Proxys von Bright Data mit Laravel verwenden können.
Verwendung eines Bright Data Proxy in Laravel
Bright Data betreibt eines der größten Proxynetzwerke der Welt, das Fortune-500-Unternehmen und über 20.000 Kunden unterstützt. Ihr Proxy-Netzwerk umfasst:
- Rechenzentrums-Proxys – Über 770.000 Rechenzentrums-IPs.
- Wohnsitz-Proxys – Über 150.000.000 Wohn-IPs in mehr als 195 Ländern.
- ISP-Proxys – Über 700.000 ISP-IPs.
- Mobile Proxys – Über 7.000.000 mobile IPs.
Führen Sie die folgenden Schritte aus, um Bright Data-Proxys für Wohngebiete mit Laravel zu verwenden.
Wenn Sie noch kein Konto haben, melden Sie sich bei Bright Data an. Wenn Sie bereits ein Konto haben, melden Sie sich an, um auf Ihr Benutzer-Dashboard zuzugreifen:
Wenn Sie angemeldet sind, klicken Sie auf die Schaltfläche “Proxy-Produkte abrufen”, um fortzufahren:
Sie werden auf die Seite “Proxies & Scraping-Infrastruktur” weitergeleitet:
Suchen Sie in der Tabelle die Zeile “Wohnen” und klicken Sie sie an:
Sie werden auf die Seite für die Wohnsitzvollmacht weitergeleitet:
Wenn Sie es zum ersten Mal tun, folgen Sie dem Assistenten, um den Proxy-Dienst nach Ihren Bedürfnissen zu konfigurieren. Wenn Sie weitere Unterstützung benötigen, wenden Sie sich bitte an den 24/7-Support.
Auf der Registerkarte “Übersicht” finden Sie den Host, den Port, den Benutzernamen und das Passwort Ihres Proxys:
Verwenden Sie diese Angaben, um Ihre Proxy-URL zu erstellen:
$proxyUrl = 'http://<brightdata_proxy_username>:<brightdata_proxy_password>@<brightdata_proxy_host>:<brightdata_proxy_port>';
eplace die Platzhalter (,
,
,
) durch Ihre tatsächlichen Proxy-Anmeldedaten.
Vergewissern Sie sich, dass die Einstellung “Aus” aktiviert ist, um das Proxy-Produkt zu aktivieren, und folgen Sie den restlichen Anweisungen, um die Einrichtung abzuschließen:
Nachdem Sie die Proxy-URL eingerichtet haben, können Sie sie nun mit dem Http-Client
in Laravel integrieren. Hier die Logik zum Senden einer Anfrage über den rotierenden Bright Data Wohn-Proxy in Laravel:
public function getIp()
{
// TODO: replace the placeholders with your Bright Data's proxy info
$proxyUrl = 'http://<brightdata_proxy_username>:<brightdata_proxy_password>@<brightdata_proxy_host>:<brightdata_proxy_port>';
// make a GET request to "/ip" through the proxy
$response = Http::withOptions([
'proxy' => $proxyUrl,
])->get('https://httpbin.org/ip');
// get the response data
$responseData = $response->json();
return response()->json($responseData);
}
Jedes Mal, wenn Sie das obige Skript ausführen, wird eine andere Exit-IP angezeigt.
Die Laravel-Proxy-Rotation war noch nie so einfach wie mit den automatisch rotierenden Proxys von Bright Data!
[Extra] Symfony’s HttpClient
Proxy Integration
Angenommen, Sie bevorzugen die HttpClient-Komponente
von Symfony gegenüber dem Standard-HTTP-Client Http
von Laravel.
Folgen Sie den nachstehenden Anweisungen, um die Proxy-Integration in HttpClient
mit Laravel zu implementieren.
Zunächst müssen Sie das Symfony HTTP-Client-Paket über Composer installieren:
composer require symfony/http-client
Als nächstes können Sie den HttpClient
von Symfony mit einem Proxy wie folgt verwenden:
<?php
namespace App\Http\Controllers;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Illuminate\Http\JsonResponse;
class IpController extends Controller
{
// where to store the HttpClient instance
private $client;
public function __construct(HttpClientInterface $client)
{
// initialize the HttpClient private instance
$this->client = $client;
}
public function getIp(): JsonResponse
{
// your proxy URL
$proxyUrl = 'http://66.29.154.103:3128'; // replace with your proxy URL
// make a GET request to the "/ip" endpoint through the proxy
$response = $this->client->request('GET', 'https://httpbin.io/ip', [
'proxy' => $proxyUrl,
]);
// parse the response JSON and return it
$responseData = $response->toArray();
return response()->json($responseData);
}
}
Dieses Setup ermöglicht es Ihnen, den HttpClient
von Symfony zu verwenden, um Anfragen über einen Proxy zu senden.
Schlussfolgerung
In diesem Tutorial zur Proxy-Integration haben Sie gelernt, warum Proxies wichtig sind und wie man sie in Laravel verwendet. Wir haben behandelt, wie man Proxys in Laravel einfach konfiguriert, sowohl mit dem Standard-HTTP-Client von Laravel als auch mit dem HttpClient
von Symfony.
Sie haben auch gesehen, warum kostenlose Proxydienste unzuverlässig und sogar riskant sein können. Um eine stabile Leistung, Sicherheit und Skalierbarkeit zu gewährleisten, müssen Sie einen vertrauenswürdigen Proxy-Anbieter wählen. Sparen Sie Zeit und Energie und wenden Sie sich direkt an den besten Proxy-Anbieter auf dem Markt, Bright Data.
Erstellen Sie ein Konto und testen Sie unsere Proxys noch heute kostenlos!
Keine Kreditkarte erforderlich