L’opzione proxy di Guzzle accetta un URL completo dell’endpoint. Impostala sulla richiesta quando solo quell’operazione deve usare l’IP scelto.

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

L’esempio presuppone Guzzle 7 installato tramite Composer. Sostituisci l’indirizzo documentale con un proxy HTTP reale del fornitore o della lista dei proxy HTTP. Mantieni la destinazione nell’URL della richiesta: il proxy è un intermediario, non la risorsa scaricata.

Qui http_errors è false affinché una risposta di errore HTTP resti disponibile per l’ispezione. Gli errori di connessione generano ancora eccezioni di trasferimento. Un tunnel HTTPS rifiutato durante la creazione può quindi fallire prima di ricevere un normale oggetto di risposta del sito.

Controlla il gestore se i limiti di connessione si comportano diversamente

Guzzle può usare gestori HTTP diversi. La documentazione indica che il gestore cURL integrato supporta connect_timeout. Un gestore personalizzato o un ambiente privo di PHP cURL non è necessariamente equivalente. Verifica il gestore usato dall’applicazione prima di presumere che un’opzione di timeout copiata sia efficace.

Conviene impostare anche il timeout complessivo. Le voci di liste gratuite possono smettere di rispondere tra un controllo e l’altro, e il valore predefinito non è una scadenza utile per una richiesta da concludere rapidamente.

Usare una mappa di proxy

Una mappa permette di scegliere percorsi secondo lo schema della destinazione e indicare esplicitamente gli host da escludere dal proxy:

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

Usa questo array al posto dell’opzione stringa. La chiave HTTPS seleziona destinazioni HTTPS; il suo valore HTTP descrive comunque il listener del proxy. Un protocollo di ascolto diverso richiede una diversa configurazione dell’endpoint.

Quando fornisci direttamente l’opzione proxy della richiesta, Guzzle si aspetta anche i valori no desiderati, anziché copiarli automaticamente da NO_PROXY. Una lista vuota serve per un test proxy isolato. Se l’applicazione ha regole di esclusione intenzionali, conservale esplicitamente.

Articoli correlati