Al final de esta guía de integración de proxies en Laravel, entenderás:
- Qué son los proxies y cómo funcionan en Laravel
- Cuándo y por qué podrías necesitarlos
- Cómo configurar un proxy en tu proyecto Laravel
- Cómo manejar la autenticación de proxy, problemas de certificados SSL y rotación de IP en Laravel
- Cómo integrar un proxy en el componente
HttpClientde Symfony
¡Empecemos!
¿Qué Es un Proxy de Laravel?
Un proxy de Laravel actúa como intermediario entre tu backend de Laravel y un servidor externo. Te permite enrutar programáticamente el tráfico de tu servidor a través de un servidor proxy para ocultar tu dirección IP.
A continuación, cómo funciona un proxy en Laravel:
- Laravel envía una solicitud HTTP usando una librería cliente HTTP con un proxy configurado.
- La solicitud pasa a través del servidor proxy.
- El proxy la reenvía al servidor de destino.
- El servidor de destino responde al proxy.
- El proxy luego devuelve la respuesta a Laravel.
Como resultado, el servidor de destino ve la solicitud proveniente de la IP del proxy, no de tu servidor Laravel. Este mecanismo ayuda a evitar restricciones geográficas, mejorar el anonimato y gestionar límites de velocidad.
Casos de Uso de Proxies en Laravel
Los proxies en Laravel son útiles en muchos escenarios, pero estos tres son los más comunes:
- Web scraping: Usa proxies para evitar baneos de IP, límites de velocidad u otros bloqueos al construir una API de web scraping. Para más información, lee nuestro tutorial sobre web scraping con Laravel.
- Evitar límites de velocidad en APIs de terceros: Rota las IPs de proxy para mantenerte dentro de las cuotas de uso de API y evitar la limitación.
- Acceder a contenido con restricción geográfica: Selecciona servidores proxy en regiones específicas para acceder a servicios disponibles solo en ciertos países.
Para más ejemplos, consulta nuestra guía sobre casos de uso de datos web y proxies.
Usar un Proxy en Laravel: Guía Paso a Paso
En esta sección, mostraremos cómo integrar un proxy en Laravel usando el cliente HTTP predeterminado. Si eres usuario de Symfony HttpClient, no te preocupes—cubriremos la integración de proxy con esa librería más adelante en el artículo.
Nota: El cliente HTTP de Laravel está construido sobre Guzzle, así que es posible que quieras revisar nuestra guía de integración de proxy con Guzzle.
Para demostrar la integración, crearemos un endpoint GET /api/v1/get-ip que:
- Envía una solicitud
GETahttps://httpbin.io/ipusando el proxy configurado. - Recupera la dirección IP de salida de la respuesta.
- Devuelve esa IP al cliente que llama al endpoint de Laravel.
Si todo está configurado correctamente, la IP devuelta por esa API coincidirá con la IP del proxy.
¡Empecemos!
Paso #1: Configuración del Proyecto
Si ya tienes una aplicación Laravel configurada, puedes omitir este paso y continuar con el Paso #2.
De lo contrario, sigue las instrucciones a continuación para crear un nuevo proyecto Laravel. Abre tu terminal y ejecuta el siguiente comando Composer create-command para inicializar un nuevo proyecto Laravel:
composer create-project laravel/laravel laravel-proxies-application
Este comando generará un nuevo proyecto Laravel en una carpeta llamada laravel-proxies-application. Abre esta carpeta en tu IDE de PHP preferido.
En este punto, la carpeta anterior debería contener la estructura de archivos predeterminada de Laravel:

¡Excelente! Ahora tienes un proyecto Laravel listo.
Paso #2: Definir el Endpoint de API de Prueba
En el directorio del proyecto, ejecuta el siguiente comando Artisan para generar un nuevo controlador:
php artisan make:controller IPController
Esto creará un archivo llamado IPController.php en el directorio /app/Http/Controllers con este contenido predeterminado:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class IPController extends Controller
{
//
}
Ahora, añade el método getIP() a continuación en IPController.php:
public function getIP(): JsonResponse
{
// make a GET request to the "/ip" endpoint to get the IP of the server
$response = Http::get('https://httpbin.io/ip');
// retrieve the response data
$responseData = $response->json();
// return the response data
return response()->json($responseData);
}
Este método usa el cliente Http de Laravel para obtener tu dirección IP desde https://httpbin.io/ip y la devuelve como JSON.
No olvides importar estas dos importaciones:
use IlluminateHttpJsonResponse;
use IlluminateSupportFacadesHttp;
Ya que quieres que tu aplicación Laravel ofrezca APIs sin estado, habilita el enrutamiento de API usando el comando Artisan install:api:
php artisan install:api
Para exponer este método a través de un endpoint de API, añade la siguiente ruta al archivo routes/api.php:
use AppHttpControllersIPController;
Route::get('/v1/get-ip', [IPController::class, 'getIP']);
Tu nuevo endpoint de API estará accesible en:
/api/v1/get-ip
Nota: Ten en cuenta que cada API de Laravel está disponible bajo la ruta /api por defecto.
¡Es hora de probar el endpoint /api/v1/get-ip!
Inicia el servidor de desarrollo de Laravel ejecutando:
php artisan serve
Tu servidor ahora debería estar escuchando localmente en el puerto 8000.
Realiza una solicitud GET al endpoint /api/v1/get-ip usando cURL:
curl -X GET 'http://localhost:8000/api/v1/get-ip'
Nota: En Windows, reemplaza curl con curl.exe. Aprende más en nuestra guía sobre cómo enviar solicitudes GET con cURL.
Deberías obtener una respuesta similar a:
{
"origin": "45.89.222.18"
}
La respuesta anterior es exactamente la misma producida por el endpoint /ip de HttpBin, lo que confirma que tu API de Laravel funciona perfectamente. En particular, la dirección IP mostrada es la IP pública de tu máquina. A continuación, ¡integremos un proxy para enmascarar esa IP!
Paso #3: Obtener un Proxy
Para usar un proxy en tu aplicación Laravel, primero necesitas acceso a un servidor proxy funcional.
Aunque muchos sitios web ofrecen URLs de proxy gratuitas, es importante ser cauteloso—mantener infraestructura de proxy es costoso. Si un servicio proporciona proxies gratis, pregúntate cómo lo están financiando. A menudo, la respuesta involucra prácticas cuestionables como la recolección de datos o el redireccionamiento de tráfico.
Nota: Los proxies gratuitos deben usarse estrictamente para pruebas o fines educativos—nunca en entornos de producción.
Si necesitas proxies confiables, opta por proveedores de buena reputación que ofrezcan pruebas gratuitas o planes gratuitos limitados.
Ahora bien, una URL de proxy típica se ve así:
<protocol>://<host>:<port>
Donde:
protocoles el protocolo necesario para conectarse al servidor proxy (por ejemplo,http,https,socks5)hostes la dirección IP o dominio del servidor proxyportes el puerto usado para enrutar el tráfico
En este ejemplo, supón que tu URL de proxy es:
http://66.29.154.103:3128
Guarda eso en una variable dentro del método getIP():
$proxyUrl = 'http://66.29.154.103:3128';
¡Hora de ver cómo usar un proxy con Http en Laravel!
Paso #4: Integrar el Proxy en Http
Integrar un proxy en Laravel usando el cliente Http solo requiere una pequeña configuración adicional:
$proxyUrl = 'http://66.29.154.103:3128';
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
$responseData = $response->json();
Como puedes ver, todo lo que necesitas hacer es pasar la URL del proxy como una opción usando el método withOptions(). Esto le indica al cliente HTTP de Laravel que enrute la solicitud a través del servidor proxy especificado, usando la opción proxy de Guzzle.
¡Increíble! Integración de proxy en Laravel completada.
Paso #5: Juntándolo Todo
Tu lógica final de API de Laravel con integración de proxy debería verse así:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateHttpJsonResponse;
use IlluminateSupportFacadesHttp;
class IPController extends Controller
{
public function getIP(): JsonResponse
{
// the URL of the proxy server
$proxyUrl = 'http://66.29.154.103:3128'; // replace with your proxy URL
// make a GET request to /ip endpoint through the proxy server
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
// retrieve the response data
$responseData = $response->json();
// return the response data
return response()->json($responseData);
}
}
Pruébalo ejecutando Laravel localmente:
php artisan serve
Y conéctate al endpoint /api/v1/get-ip nuevamente:
curl -X GET 'http://localhost:8000/api/v1/get-ip'
Esta vez, la salida debería ser algo como:
{
"origin": "66.29.154.103"
}
El campo "origin" muestra la dirección IP del servidor proxy, confirmando que tu IP real ahora está oculta detrás del proxy.
Advertencia: Los servidores proxy gratuitos suelen ser inestables o de corta duración. Para cuando intentes esto, el proxy de ejemplo podría ya no funcionar. Si es necesario, reemplaza $proxyUrl con uno actualmente activo antes de probar.
Nota: Si encuentras errores SSL al hacer la solicitud, consulta los consejos de resolución de problemas proporcionados en la sección de casos de uso avanzados a continuación.
Casos de Uso Avanzados
Acabas de aprender los conceptos básicos de la integración de proxy con Laravel, pero hay otros escenarios más avanzados a considerar.
Autenticación de Proxy
Los proxies premium a menudo requieren autenticación para que solo los usuarios autorizados puedan acceder a ellos. En ese caso, si no especificas las credenciales correctas, obtendrás este error:
cURL error 56: CONNECT tunnel failed, response 407
La URL de un proxy autenticado típicamente sigue este formato:
<protocol>://<username>:<password>@<host>:<port>
Donde username y password son tus credenciales de autenticación.
La clase Http de Laravel (que está basada en Guzzle internamente) admite completamente proxies autenticados. Así que no necesitas cambiar mucho. Solo incluye las credenciales de autenticación directamente en la URL del proxy:
$proxyUrl = '<protocol>://<username>:<password>@<host>:<port>';
Por ejemplo:
// authenticated proxy with username and password
$proxyUrl = 'http://<username>:<password>@<host>:<port>';
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
Reemplaza el valor de $proxyUrl con una URL de proxy autenticado válida.
¡Http ahora enrutará el tráfico al servidor proxy autenticado configurado!
Evitar Problemas de Certificados SSL
Al configurar un proxy usando el cliente Http de Laravel, tus solicitudes podrían fallar debido a errores de verificación de certificados SSL como:
cURL error 60: SSL certificate problem: self-signed certificate in certificate chain
Eso típicamente ocurre cuando el servidor proxy usa un certificado SSL autofirmado.
Si confías en el servidor proxy y solo estás probando localmente o en un entorno seguro, puedes desactivar la verificación SSL así:
$response = Http::withOptions([
'proxy' => $proxyUrl,
'verify' => false, // disable SSL certificate verification
])->get('https://httpbin.io/ip');
Advertencia: Desactivar la verificación SSL te expone a ataques de intermediario (man-in-the-middle). Por lo tanto, usa esta opción solo en entornos confiables.
De lo contrario, si tienes el archivo de certificado del servidor proxy (por ejemplo, proxy-ca.crt), puedes usarlo para la verificación SSL así:
$response = Http::withOptions([
'proxy' => $proxyUrl,
'verify' => storage_path('certs/proxy-ca.crt'), // Path to the CA bundle
])->get('https://httpbin.io/ip');
Asegúrate de que el archivo proxy-ca.crt esté almacenado en un directorio seguro y accesible (por ejemplo, storage/certs/), y que Laravel tenga permiso para leerlo.
Con cualquiera de los métodos implementados, el error de verificación SSL causado por el proxy debería desaparecer.
Rotación de Proxy
Si sigues usando el mismo servidor proxy repetidamente, el sitio web objetivo probablemente eventualmente detecte y bloquee la dirección IP de ese proxy. Para evitar eso, puedes rotar tus servidores proxy—usando uno diferente para cada solicitud.
Estos son los pasos para rotar proxies en Laravel:
- Crea un array que contenga múltiples URLs de proxy
- Selecciona uno aleatoriamente antes de cada solicitud
- Configura el proxy seleccionado en la configuración del cliente HTTP
Implementa eso con este código:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateHttpJsonResponse;
use IlluminateSupportFacadesHttp;
function getRandomProxyUrl(): string
{
// a list of valid proxy URLs (replace with your proxy URLs)
$proxies = [
'<protocol_1>://<proxy_host_1>:<port_1>',
// ...
'<protocol_n>://<proxy_host_n>:<port_n>',
];
// return a proxy URL randomly picked from the list
return $proxies[array_rand($proxies)];
}
class IPController extends Controller
{
public function getIP(): JsonResponse
{
// the URL of the proxy server
$proxyUrl = getRandomProxyUrl();
// make a GET request to /ip endpoint through the proxy server
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
// retrieve the response data
$responseData = $response->json();
// return the response data
return response()->json($responseData);
}
}
El fragmento anterior muestra cómo seleccionar aleatoriamente un proxy de una lista para simular la rotación de proxy. Aunque este enfoque funciona, tiene algunas desventajas:
- Debes mantener un grupo de servidores proxy confiables, lo que a menudo tiene un costo.
- Para una rotación efectiva, el grupo de proxies necesita ser lo suficientemente grande. Sin un grupo amplio, los mismos proxies se usarán repetidamente, lo que puede llevar a la detección y el bloqueo.
Para superar esas limitaciones, considera aprovechar la red de proxies rotativos de Bright Data. Esa infraestructura rota automáticamente las direcciones IP en tu nombre y te da acceso a:
- Más de 1500M de IPs en 195 países
- Alto tiempo de actividad y una tasa de éxito del 99.9%
En la siguiente sección, te mostraremos cómo usar los proxies rotativos de Bright Data con Laravel.
Usar un Proxy de Bright Data en Laravel
Bright Data opera una de las redes de proxy más grandes del mundo, respaldando a empresas Fortune 500 y 50,000+ clientes. Su red de proxy incluye:
- Proxies de centro de datos – 1,300,000+ IPs de centro de datos.
- Proxies residenciales – 400M+ IPs residenciales en más de 195 países.
- Proxies ISP – 1,300,000+ IPs ISP.
Sigue los pasos a continuación para usar los proxies residenciales de Bright Data con Laravel.
Si aún no tienes una cuenta, adelante, regístrate en Bright Data. Si ya tienes una, inicia sesión para acceder a tu panel de usuario:

Una vez conectado, haz clic en el botón “Get proxy products” para continuar:

Serás redirigido a la página “Proxies & Scraping Infrastructure”:

En la tabla, busca la fila “Residential” y haz clic en ella:

Serás dirigido a la página de proxy residencial:

Si es tu primera vez, sigue el asistente para configurar el servicio de proxy según tus necesidades. Para más ayuda, no dudes en contactar al soporte 24/7.
En la pestaña “Overview”, encuentra el host, puerto, nombre de usuario y contraseña de tu proxy:

Usa estos detalles para construir tu URL de proxy:
$proxyUrl = 'http://<brightdata_proxy_username>:<brightdata_proxy_password>@<brightdata_proxy_host>:<brightdata_proxy_port>';
Reemplaza los marcadores de posición (<brightdata_proxy_username>, <brightdata_proxy_password>, <brightdata_proxy_host>, <brightdata_proxy_port>) con tus credenciales de proxy reales.
Asegúrate de activar el interruptor “Off” para habilitar el producto proxy, y sigue el resto de las instrucciones para completar la configuración:

Con tu URL de proxy configurada, ahora puedes integrarla en Laravel usando el cliente Http. Aquí está la lógica para enviar una solicitud a través del proxy residencial rotativo de Bright Data en Laravel:
public function getIp()
{
// TODO: replace the placeholders with your Bright Data's proxy info
$proxyUrl = 'http://<brightdata_proxy_username>:<brightdata_proxy_password>@<brightdata_proxy_host>:<brightdata_proxy_port>';
// make a GET request to "/ip" through the proxy
$response = Http::withOptions([
'proxy' => $proxyUrl,
])->get('https://httpbin.org/ip');
// get the response data
$responseData = $response->json();
return response()->json($responseData);
}
Cada vez que ejecutes el script anterior, verás una IP de salida diferente.
¡La rotación de proxy en Laravel nunca ha sido tan fácil con los proxies de autorotación de Bright Data!
[Extra] Integración de Proxy en el HttpClient de Symfony
Supongamos que prefieres el componente HttpClient de Symfony en lugar del cliente HTTP predeterminado de Laravel, Http.
Sigue las instrucciones a continuación para implementar la integración de proxy en HttpClient con Laravel.
Primero, necesitas instalar el paquete cliente HTTP de Symfony vía Composer:
composer require symfony/http-client
A continuación, puedes usar el HttpClient de Symfony con un proxy de la siguiente manera:
<?php
namespace AppHttpControllers;
use SymfonyContractsHttpClientHttpClientInterface;
use IlluminateHttpJsonResponse;
class IpController extends Controller
{
// where to store the HttpClient instance
private $client;
public function __construct(HttpClientInterface $client)
{
// initialize the HttpClient private instance
$this->client = $client;
}
public function getIp(): JsonResponse
{
// your proxy URL
$proxyUrl = 'http://66.29.154.103:3128'; // replace with your proxy URL
// make a GET request to the "/ip" endpoint through the proxy
$response = $this->client->request('GET', 'https://httpbin.io/ip', [
'proxy' => $proxyUrl,
]);
// parse the response JSON and return it
$responseData = $response->toArray();
return response()->json($responseData);
}
}
Esta configuración te permite usar el HttpClient de Symfony para enviar solicitudes a través de un proxy.
Conclusión
En este tutorial de integración de proxy, aprendiste por qué los proxies importan y cómo usarlos en Laravel. Cubrimos cómo configurar fácilmente proxies en Laravel, tanto con el cliente HTTP predeterminado de Laravel como con el HttpClient de Symfony.
También viste por qué los servicios de proxy gratuitos pueden ser poco confiables e incluso arriesgados. Para un rendimiento estable, seguridad y escalabilidad, debes elegir un proveedor de proxy confiable. Ahorra tiempo y energía y ve directamente al mejor proveedor de proxy del mercado, Bright Data.
¡Crea una cuenta y comienza a probar nuestros proxies hoy mismo!