Eine Proxy-IP für eine Guzzle-Anfrage festlegen
Guzzles Proxy-Option pro Anfrage nutzen und handlerabhängiges Verbindungs-Timeout sowie explizite Umgehungslisten verstehen.
Guzzles Option proxy akzeptiert eine vollständige Endpunkt-URL. Setzen Sie sie an der Anfrage, wenn nur dieser Vorgang die gewählte IP nutzen soll.
<?php
require __DIR__ . '/vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://example.com/', [
'proxy' => 'http://203.0.113.10:8080',
'connect_timeout' => 5,
'timeout' => 15,
'http_errors' => false,
]);
echo $response->getStatusCode(), PHP_EOL;
echo (string) $response->getBody();
Das Beispiel setzt voraus, dass Guzzle 7 über Composer installiert ist. Ersetzen Sie die Dokumentationsadresse durch einen echten HTTP-Proxy vom Anbieter oder aus der HTTP-Proxy-Liste. Das Ziel bleibt in der Anfrage-URL: Der Proxy ist Vermittler, nicht die herunterzuladende Ressource.
Hier ist http_errors false, damit eine HTTP-Fehlerantwort zur Untersuchung verfügbar bleibt. Verbindungsfehler werfen weiterhin Transfer-Ausnahmen. Ein beim Aufbau abgelehnter HTTPS-Tunnel kann daher scheitern, bevor Sie ein gewöhnliches Website-Antwortobjekt erhalten.
Bei abweichenden Verbindungslimits den Handler prüfen
Guzzle kann verschiedene HTTP-Handler verwenden. Laut Dokumentation unterstützt der eingebaute cURL-Handler connect_timeout. Ein eigener Handler oder eine Umgebung ohne PHP cURL ist nicht unbedingt gleichwertig. Prüfen Sie den tatsächlich verwendeten Handler, bevor Sie annehmen, eine kopierte Timeout-Option wirke.
Auch das gesamte timeout sollte gesetzt werden. Einträge kostenloser Listen können zwischen Prüfungen aufhören zu antworten; der Standardwert ist keine brauchbare Frist für eine Anfrage, die zügig enden muss.
Eine Proxy-Zuordnung verwenden
Eine Zuordnung wählt Wege nach dem Zielschema aus und erlaubt explizite Hosts zur Proxy-Umgehung:
'proxy' => [
'http' => 'http://203.0.113.10:8080',
'https' => 'http://203.0.113.10:8080',
'no' => [],
],
Verwenden Sie dieses Array statt der Zeichenkette. Der HTTPS-Schlüssel wählt HTTPS-Ziele; sein HTTP-Wert beschreibt weiterhin den Proxy-Listener. Ein anderes Listener-Protokoll erfordert eine andere Endpunktkonfiguration.
Wenn Sie die Proxy-Anfrageoption selbst setzen, erwartet Guzzle auch die gewünschten no-Werte von Ihnen, statt sie automatisch aus NO_PROXY zu übernehmen. Eine leere Liste ist für einen isolierten Proxy-Test nützlich. Hat die Anwendung bewusst eingerichtete Umgehungsregeln, bewahren Sie diese stattdessen ausdrücklich.