Zum Inhalt springen
GProxy
Registrierung
Гайды 6 Min. Lesezeit 32 Aufrufe

PHP Proxy Einrichtung

Diese Anleitung behandelt die Einrichtung von PHP-Proxys mit cURL, Guzzle und file_get_contents. Integrieren Sie Proxys effizient für Ihre Webprojekte.

PHP Proxy Einrichtung

Die Einrichtung eines PHP-Proxys für cURL, Guzzle und file_get_contents beinhaltet die Konfiguration von HTTP-Client-Optionen oder Stream-Kontexten, um ausgehende Anfragen über einen bestimmten Proxy-Server zu leiten, typischerweise durch die Definition des Hosts, Ports und der Authentifizierungsdaten des Proxys.

Die Verwendung eines Proxy-Servers mit PHP ermöglicht es Anwendungen, ihre Ursprungs-IP-Adresse zu maskieren, geografische Beschränkungen zu umgehen, auf Ressourcen aus internen Netzwerken zuzugreifen oder Anfrageraten für Web-Scraping und API-Interaktionen zu verwalten. Die Wahl der Methode hängt von der erforderlichen Kontrolle, der Komplexität der Anfragen und den Anforderungen an die Fehlerbehandlung ab.

Verwendung von cURL

cURL ist eine robuste Bibliothek für HTTP-Anfragen, die eine umfassende Kontrolle über Verbindungsparameter, einschließlich Proxy-Einstellungen, bietet. Sie ist eine gängige Wahl für komplexe Web-Interaktionen und ist typischerweise als PHP-Erweiterung (php-curl) verfügbar.

Grundlegende Proxy-Einrichtung

Um eine Anfrage über einen HTTP- oder HTTPS-Proxy zu leiten, verwenden Sie CURLOPT_PROXY und CURLOPT_PROXYPORT.

<?php
$ch = curl_init();

// Ziel-URL
curl_setopt($ch, CURLOPT_URL, 'http://example.com/api/data');

// Proxy-Einstellungen
curl_setopt($ch, CURLOPT_PROXY, 'proxy.example.com');
curl_setopt($ch, CURLOPT_PROXYPORT, 8080);

// Die Übertragung als String zurückgeben, anstatt sie direkt auszugeben
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo 'cURL error: ' . curl_error($ch);
} else {
    echo $response;
}

curl_close($ch);
?>

SOCKS-Proxy

cURL unterstützt SOCKS-Proxys (SOCKS4, SOCKS4a, SOCKS5, SOCKS5h). Geben Sie den Proxy-Typ mit CURLOPT_PROXYTYPE an.

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://example.com/api/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// SOCKS5-Proxy-Einstellungen
curl_setopt($ch, CURLOPT_PROXY, 'socks5.example.com');
curl_setopt($ch, CURLOPT_PROXYPORT, 1080);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); // Oder CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A, CURLPROXY_SOCKS5_HOSTNAME

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo 'cURL error: ' . curl_error($ch);
} else {
    echo $response;
}

curl_close($ch);
?>

Proxy mit Authentifizierung

Für Proxys, die eine Authentifizierung erfordern, verwenden Sie CURLOPT_PROXYUSERPWD mit einem username:password-String.

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://example.com/api/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Proxy-Einstellungen mit Authentifizierung
curl_setopt($ch, CURLOPT_PROXY, 'authproxy.example.com');
curl_setopt($ch, CURLOPT_PROXYPORT, 8080);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'proxyuser:proxypassword');

// Optional: Proxy-Authentifizierungsmethode angeben (z.B. CURLAUTH_BASIC, CURLAUTH_DIGEST)
// curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo 'cURL error: ' . curl_error($ch);
} else {
    echo $response;
}

curl_close($ch);
?>

HTTPS-Proxy (CONNECT-Tunneling)

Beim Verbinden mit einem HTTPS-Ziel über einen HTTP-Proxy verwendet cURL die HTTP-Methode CONNECT, um einen Tunnel aufzubauen. CURLOPT_HTTPPROXYTUNNEL kann dies explizit aktivieren, obwohl es oft automatisch gehandhabt wird.

<?php
$ch = curl_init();

// Ziel-HTTPS-URL
curl_setopt($ch, CURLOPT_URL, 'https://secure.example.com/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Proxy-Einstellungen
curl_setopt($ch, CURLOPT_PROXY, 'proxy.example.com');
curl_setopt($ch, CURLOPT_PROXYPORT, 8080);

// Tunneling für HTTPS über HTTP-Proxy aktivieren (oft impliziert)
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

// SSL-Zertifikatsprüfung handhaben (für Tests deaktivieren, für Produktion aktivieren)
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);
?>

Gängige cURL-Optionen für Proxys

  • CURLOPT_TIMEOUT: Maximale Zeit in Sekunden für den cURL-Vorgang.
  • CURLOPT_CONNECTTIMEOUT: Maximale Zeit in Sekunden zum Aufbau einer Verbindung.
  • CURLOPT_FOLLOWLOCATION: Location: HTTP-Header folgen.
  • CURLOPT_MAXREDIRS: Maximale Anzahl von Weiterleitungen, denen gefolgt werden soll.
  • CURLOPT_SSL_VERIFYPEER, CURLOPT_SSL_VERIFYHOST: Steuerung der SSL-Zertifikatsprüfung. Für die Produktion auf true setzen.
  • CURLOPT_HEADER: Header in die Ausgabe einschließen.

Verwendung von Guzzle

Guzzle ist ein beliebter PHP-HTTP-Client, der eine höhere Abstraktionsebene über cURL bietet und gängige HTTP-Aufgaben vereinfacht. Die Installation erfolgt über Composer.

Grundlegende Proxy-Einrichtung

Guzzle-Clients und -Anfragen akzeptieren eine proxy-Option. Diese kann global für einen Client oder pro Anfrage definiert werden.

<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client([
    // Basis-URI für alle Anfragen, die mit diesem Client gestellt werden
    'base_uri' => 'http://example.com/',
    // Globale Proxy-Einstellung für den Client
    'proxy' => 'http://proxy.example.com:8080',
]);

try {
    $response = $client->request('GET', 'api/data');
    echo $response->getBody();
} catch (GuzzleHttp\Exception\RequestException $e) {
    echo 'Guzzle error: ' . $e->getMessage();
}
?>

Proxy mit Authentifizierung

Fügen Sie Authentifizierungsdaten direkt in die Proxy-URI für HTTP/HTTPS-Proxys ein.

<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client([
    'base_uri' => 'http://example.com/',
    // Proxy mit Authentifizierung
    'proxy' => 'http://proxyuser:proxypassword@authproxy.example.com:8080',
]);

try {
    $response = $client->request('GET', 'api/data');
    echo $response->getBody();
} catch (GuzzleHttp\Exception\RequestException $e) {
    echo 'Guzzle error: ' . $e->getMessage();
}
?>

SOCKS-Proxy

Geben Sie SOCKS-Proxys unter Verwendung des socks-Schemas in der Proxy-URI an.

<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client([
    'base_uri' => 'http://example.com/',
    // SOCKS5-Proxy
    'proxy' => 'socks5://socks5.example.com:1080',
]);

try {
    $response = $client->request('GET', 'api/data');
    echo $response->getBody();
} catch (GuzzleHttp\Exception\RequestException $e) {
    echo 'Guzzle error: ' . $e->getMessage();
}
?>

Proxys pro Anfrage

Die proxy-Option kann für einzelne Anfragen überschrieben oder angegeben werden.

<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client(); // Kein globaler Proxy

try {
    $response = $client->request('GET', 'http://example.com/api/data', [
        'proxy' => 'http://perrequestproxy.example.com:8080', // Proxy für diese spezifische Anfrage
    ]);
    echo $response->getBody();
} catch (GuzzleHttp\Exception\RequestException $e) {
    echo 'Guzzle error: ' . $e->getMessage();
}
?>

Gängige Guzzle-Optionen für Proxys

  • proxy: Der Proxy-URI-String (http://, https://, socks4://, socks5://).
  • verify: Steuert die SSL-Zertifikatsprüfung (true, false oder Pfad zum CA-Bundle).
  • timeout: Gesamt-Timeout für die Anfrage in Sekunden.
  • connect_timeout: Timeout für die Verbindung zum Server in Sekunden.
  • allow_redirects: Steuert die Weiterleitungsbehandlung (true, false oder Array von Optionen).

Verwendung von file_get_contents

file_get_contents ist eine einfache Funktion zum Lesen von Dateiinhalten, einschließlich URLs. Sie kann Stream-Kontexte verwenden, um Proxy-Einstellungen zu konfigurieren, bietet jedoch weniger Kontrolle und Fehlerbehandlung im Vergleich zu cURL oder Guzzle. Sie eignet sich für grundlegende HTTP/HTTPS-Anfragen mit einfachen Proxy-Anforderungen.

Grundlegende Proxy-Einrichtung

Verwenden Sie stream_context_create, um Proxy-Einstellungen innerhalb der http-Optionen zu definieren.

<?php
$proxy = 'tcp://proxy.example.com:8080';
$url = 'http://example.com/api/data';

$context = stream_context_create([
    'http' => [
        'proxy' => $proxy,
        'request_fulluri' => true, // Wesentlich für HTTP-Proxys
    ],
]);

$response = @file_get_contents($url, false, $context);

if ($response === false) {
    echo 'Failed to retrieve content via proxy.';
} else {
    echo $response;
}
?>

request_fulluri muss auf true gesetzt werden, wenn ein HTTP-Proxy verwendet wird, da dies den Client anweist, die vollständige URI in der Anforderungszeile zu senden (z.B. GET http://example.com/path HTTP/1.0).

HTTPS-Proxy

Für HTTPS-Ziele handhabt der https-Stream-Wrapper die Proxy-Einrichtung ähnlich wie http.

<?php
$proxy = 'tcp://proxy.example.com:8080';
$url = 'https://secure.example.com/data';

$context = stream_context_create([
    'http' => [ // Hinweis: Proxy-Konfiguration ist immer noch unter 'http' für CONNECT-Tunneling
        'proxy' => $proxy,
        'request_fulluri' => true,
    ],
    'ssl' => [ // SSL/TLS-Verifizierungsoptionen
        'verify_peer' => false, // Für Tests deaktivieren, für Produktion aktivieren
        'verify_peer_name' => false,
    ],
]);

$response = @file_get_contents($url, false, $context);

if ($response === false) {
    echo 'Failed to retrieve content via proxy.';
} else {
    echo $response;
}
?>

Proxy mit Authentifizierung

Die Proxy-Authentifizierung für file_get_contents wird typischerweise durch manuelles Setzen des Proxy-Authorization-Headers innerhalb der http-Kontextoptionen gehandhabt.

<?php
$proxy = 'tcp://proxy.example.com:8080';
$url = 'http://example.com/api/data';
$proxyUser = 'proxyuser';
$proxyPass = 'proxypassword';

// Benutzername:Passwort für die Basic-Authentifizierung Base64-kodieren
$authHeader = 'Proxy-Authorization: Basic ' . base64_encode("$proxyUser:$proxyPass");

$context = stream_context_create([
    'http' => [
        'proxy' => $proxy,
        'request_fulluri' => true,
        'header' => $authHeader,
    ],
]);

$response = @file_get_contents($url, false, $context);

if ($response === false) {
    echo 'Failed to retrieve content via proxy.';
} else {
    echo $response;
}
?>

Einschränkungen von file_get_contents mit Proxys

  • Keine SOCKS-Proxy-Unterstützung: PHPs Stream-Wrapper unterstützen SOCKS-Proxys nicht nativ.
  • Begrenzte Fehlerbehandlung: Fehlerinformationen sind minimal und basieren auf Warnungen oder false-Rückgabewerten.
  • Weniger Kontrolle: Die granulare Kontrolle über Anfrage-Header, Timeouts und Weiterleitungsbehandlung ist weniger flexibel.
  • Leistung: Kann für gleichzeitige oder zahlreiche Anfragen weniger leistungsfähig sein als cURL.

Vergleich der PHP-Proxy-Methoden

Feature cURL (via php-curl) Guzzle (via Composer) file_get_contents (via Stream-Kontexte)
Benutzerfreundlichkeit Moderat (direkte Optionssetzung) Hoch (objektorientiert, flüssige Schnittstelle) Hoch (einfacher Funktionsaufruf, Kontext-Setup)
Proxy-Typen HTTP, HTTPS (CONNECT), SOCKS4/4a/5/5h HTTP, HTTPS (CONNECT), SOCKS4/5 HTTP, HTTPS (CONNECT)
Authentifizierung CURLOPT_PROXYUSERPWD URI-eingebettet (user:pass@host) Manueller Proxy-Authorization-Header
Fehlerbehandlung Detailliert (curl_errno, curl_error) Robust (Ausnahmen, PSR-7-Antworten) Grundlegend (false-Rückgabe, Warnungen)
Kontrollebene Hoch (granulare Kontrolle über alle cURL-Optionen) Hoch (umschließt cURL, bietet High-Level-Optionen) Niedrig (begrenzt auf Stream-Kontext-Optionen)
SSL-Verifizierung CURLOPT_SSL_VERIFYPEER, CURLOPT_SSL_VERIFYHOST verify-Option ssl-Kontextoptionen (verify_peer, verify_peer_name)
Weiterleitungsbehandlung CURLOPT_FOLLOWLOCATION, CURLOPT_MAXREDIRS allow_redirects-Option Begrenzt (automatisch für HTTP, weniger konfigurierbar)
Abhängigkeiten PHP cURL-Erweiterung PHP cURL-Erweiterung, Composer, Guzzle-Paket Keine (eingebaute PHP-Funktion)
Bester Anwendungsfall Komplex, hohe Leistung, Low-Level-Integration Moderne Anwendungen, REST-APIs, robuste Fehlerbehandlung Einfache, schnelle Skripte für grundlegende GET-Anfragen
Aktualisiert: 03.03.2026
Zurück zur Kategorie

Testen Sie unsere Proxys

20.000+ Proxys in über 100 Ländern weltweit

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.