Guzzles optie proxy accepteert een volledige eindpunt-URL. Stel deze op de aanvraag in wanneer alleen die handeling het gekozen IP moet gebruiken.

<?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();

Het voorbeeld gaat uit van Guzzle 7 geïnstalleerd via Composer. Vervang het documentatieadres door een echte HTTP-proxy van je aanbieder of uit de lijst met HTTP-proxy’s. Houd de bestemming in de aanvraag-URL: de proxy is een tussenpersoon, niet de te downloaden bron.

Hier is http_errors false zodat een HTTP-foutantwoord beschikbaar blijft voor onderzoek. Verbindingsfouten werpen nog steeds overdrachtsexcepties op. Een bij het opzetten geweigerde HTTPS-tunnel kan dus mislukken voordat je een normaal websiteantwoordobject ontvangt.

Controleer de handler als verbindingslimieten anders werken

Guzzle kan verschillende HTTP-handlers gebruiken. Volgens de documentatie ondersteunt de ingebouwde cURL-handler connect_timeout. Een eigen handler of omgeving zonder PHP cURL is niet noodzakelijk gelijkwaardig. Controleer de handler van de applicatie voordat je aanneemt dat een gekopieerde time-outoptie werkt.

Ook de totale timeout is het instellen waard. Gratislijstvermeldingen kunnen tussen controles stoppen met antwoorden; de standaardwaarde is geen bruikbare deadline voor een aanvraag die snel klaar moet zijn.

Een proxymap gebruiken

Met een map kies je routes op basis van het bestemmingsschema en geef je expliciet hosts op die de proxy omzeilen:

'proxy' => [
    'http' => 'http://203.0.113.10:8080',
    'https' => 'http://203.0.113.10:8080',
    'no' => [],
],

Gebruik deze array in plaats van de stringoptie. De HTTPS-sleutel kiest HTTPS-bestemmingen; de HTTP-waarde beschrijft nog steeds de proxylistener. Een ander luisterprotocol vereist een andere eindpuntconfiguratie.

Als je zelf de proxyoptie voor de aanvraag opgeeft, verwacht Guzzle ook de bedoelde no-waarden van jou in plaats van deze automatisch uit NO_PROXY te kopiëren. Een lege lijst is nuttig voor een geïsoleerde proxytest. Heeft de applicatie bewuste uitzonderingsregels, behoud die dan expliciet.

Gerelateerde artikelen