Impostare un IP proxy per una richiesta Guzzle
Usa l’opzione proxy per richiesta di Guzzle e comprendi il timeout di connessione dipendente dal gestore e l’elenco esplicito di esclusioni.
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.