Ange en proxy-IP för en Guzzle-begäran
Använd Guzzles proxyalternativ per begäran och förstå handlerberoende anslutningstimeout och explicita undantagslistor.
Guzzles alternativ proxy accepterar en fullständig ändpunkts-URL. Ange det på begäran när bara den operationen ska använda den valda IP-adressen.
<?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();
Exemplet förutsätter Guzzle 7 installerat via Composer. Ersätt dokumentationsadressen med en riktig HTTP-proxy från leverantören eller listan med HTTP-proxyer. Behåll destinationen i begärans URL: proxyn är mellanhand, inte resursen som hämtas.
Här är http_errors false så att ett HTTP-felsvar fortfarande kan granskas. Anslutningsfel kastar fortfarande överföringsundantag. En HTTPS-tunnel som avvisas vid upprättandet kan därför misslyckas innan du får ett vanligt svarsobjekt från webbplatsen.
Kontrollera handlern om anslutningsgränser fungerar annorlunda
Guzzle kan använda olika HTTP-handlers. Dokumentationen säger att den inbyggda cURL-handlern stöder connect_timeout. En egen handler eller en miljö utan PHP cURL är inte nödvändigtvis likvärdig. Kontrollera applikationens handler innan du antar att ett kopierat timeoutalternativ fungerar.
Det är också värt att ange den totala timeout. Gratislistposter kan sluta svara mellan kontroller, och standardvärdet är ingen användbar tidsgräns för en begäran som måste bli klar snabbt.
Använda en proxykarta
En karta låter dig välja vägar efter destinationsschema och ange explicita värdar som ska undantas från proxyn:
'proxy' => [
'http' => 'http://203.0.113.10:8080',
'https' => 'http://203.0.113.10:8080',
'no' => [],
],
Använd denna array i stället för strängalternativet. HTTPS-nyckeln väljer HTTPS-destinationer; dess HTTP-värde beskriver fortfarande proxyns lyssnare. Ett annat lyssnarprotokoll kräver annan ändpunktskonfiguration.
När du själv anger proxyalternativet för begäran förväntar sig Guzzle att du anger önskade no-värden i stället för att automatiskt kopiera dem från NO_PROXY. En tom lista är användbar för ett isolerat proxytest. Har applikationen avsiktliga undantagsregler, bevara dem explicit.