La opción proxy de Guzzle acepta una URL completa de punto de conexión. Establécela en la solicitud cuando solo esa operación deba usar la IP elegida.

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

El ejemplo supone Guzzle 7 instalado mediante Composer. Sustituye la dirección de documentación por un proxy HTTP real del proveedor o de la lista de proxies HTTP. Mantén el destino en la URL de la solicitud: el proxy es un intermediario, no el recurso descargado.

Aquí http_errors es false para que la respuesta de error HTTP siga disponible para examinarla. Los fallos de conexión siguen lanzando excepciones de transferencia. Un túnel HTTPS rechazado al establecerse puede fallar antes de recibir un objeto de respuesta normal del sitio.

Revisa el manejador si los límites de conexión se comportan distinto

Guzzle puede usar distintos manejadores HTTP. Su documentación indica que el manejador cURL integrado admite connect_timeout. Un manejador personalizado o un entorno sin PHP cURL no es necesariamente equivalente. Revisa el manejador que usa la aplicación antes de suponer que una opción de tiempo copiada está funcionando.

También conviene establecer el timeout global. Las entradas de listas gratuitas pueden dejar de responder entre comprobaciones, y el valor predeterminado no es un plazo útil para una solicitud que debe terminar pronto.

Usar un mapa de proxies

Un mapa permite elegir rutas por el esquema del destino y proporcionar hosts explícitos que eviten el proxy:

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

Usa este array en lugar de la opción de cadena. La clave HTTPS selecciona destinos HTTPS; su valor HTTP sigue describiendo el servicio de escucha del proxy. Un protocolo de escucha distinto requiere otra configuración del punto de conexión.

Si proporcionas la opción proxy de la solicitud, Guzzle espera que indiques los valores no deseados en vez de copiarlos automáticamente de NO_PROXY. Una lista vacía sirve para una prueba aislada de proxy. En una aplicación con reglas de exclusión deliberadas, consérvalas explícitamente.

Artículos relacionados