Cómo usar proxies en Laravel: Tutorial 2025

Domine el uso de proxy en Laravel, desde la configuración simple hasta la autenticación y la rotación de IP, garantizando el raspado web sin bloqueos y el acceso geográfico.
4 min de lectura
Laravel Proxies blog image

Al final de esta guía de integración de proxy Laravel, usted entenderá:

  • Qué son los proxies y cómo funcionan en Laravel
  • Cuándo y por qué puede necesitarlos
  • Cómo configurar un proxy en su proyecto Laravel
  • Cómo manejar la autenticación proxy, los problemas de certificados SSL y la rotación de IP en Laravel
  • Cómo integrar un proxy en el componente HttpClient de Symfony

Sumerjámonos.

¿Qué es un proxy Laravel?

Un proxy Laravel actúa como intermediario entre tu backend Laravel y un servidor externo. Le permite enrutar mediante programación el tráfico de su servidor a través de un servidor proxy para ocultar su dirección IP.

A continuación se muestra cómo funciona un proxy en Laravel:

  1. Laravel envía una petición HTTP usando una librería cliente HTTP con un proxy configurado.
  2. La solicitud pasa por el servidor proxy.
  3. El proxy lo reenvía al servidor de destino.
  4. El servidor de destino responde al proxy.
  5. A continuación, el proxy devuelve la respuesta a Laravel.

Como resultado, el servidor de destino ve la solicitud procedente de la IP del proxy, no de tu servidor Laravel. Este mecanismo ayuda a evitar las restricciones geográficas, mejorar el anonimato y gestionar los 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: Utilice proxies para evitar prohibiciones de IP, límites de velocidad u otros bloqueos cuando construya una API de web scraping. Para más información, lee nuestro tutorial sobre web scraping con Laravel.
  • Evitar los límites de velocidad de las API de terceros: Rote las IP proxy para mantenerse dentro de las cuotas de uso de la API y evitar la estrangulación.
  • Acceder a contenidos con restricciones geográficas: Selecciona servidores proxy en regiones específicas para acceder a servicios solo disponibles en determinados países.

Para más ejemplos, consulte nuestra guía sobre casos de uso de datos web y proxy.

Usando 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 por defecto. 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, por lo que puede que quieras consultar nuestra guía de integración del proxy Guzzle.

Para demostrar la integración, crearemos un endpoint GET /api/v1/get-ip que:

  1. Envía una solicitud GET a https://httpbin.io/ip utilizando el proxy configurado.
  2. Recupera la dirección IP de salida de la respuesta.
  3. 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 nº 1: Configuración del proyecto

Si ya tienes una aplicación Laravel configurada, puedes saltarte este paso y continuar con el Paso #2.

De lo contrario, siga las siguientes instrucciones para crear un nuevo proyecto Laravel. Abre tu terminal y ejecuta el siguiente comando de 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. Abra esta carpeta en su IDE de PHP preferido.

En este punto, la carpeta anterior debería contener la estructura de archivos por defecto de Laravel:

La estructura del proyecto Laravel

¡Maravilloso! Ya tienes un proyecto Laravel.

Paso 2: Definir el punto final de la API de prueba

En el directorio del proyecto, ejecute 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 por defecto:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class IPController extends Controller
{
    //
}

Ahora, agregue el método getIP() a continuación a 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 utiliza el cliente Http de Laravel para obtener tu dirección IP de https://httpbin.io/ip y la devuelve como JSON.

No olvide importar estas dos importaciones:

use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Http;

Ya que quieres que tu aplicación Laravel ofrezca APIs sin estado, habilita el enrutamiento API usando el comando install:api Artisan:

php artisan install:api

Para exponer este método a través de un punto final de API, añada la siguiente ruta al archivo routes/api.php:

use App\Http\Controllers\IPController;

Route::get('/v1/get-ip', [IPController::class, 'getIP']);

Su nuevo punto final de API será accesible en:

/api/v1/get-ip

Nota: Tenga en cuenta que cada API de Laravel está disponible en la ruta /api por defecto.

Es hora de probar el punto final /api/v1/get-ip.

Inicie el servidor de desarrollo Laravel ejecutando:

php artisan serve

Su servidor debería estar ahora escuchando localmente en el puerto 8000.

Realice una solicitud GET al punto final /api/v1/get-ip utilizando cURL:

curl -X GET 'http://localhost:8000/api/v1/get-ip' 

Nota: En Windows, sustituya curl por curl.exe. Obtenga más información 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 Laravel está funcionando perfectamente. En concreto, la dirección IP mostrada es la IP pública de tu máquina. A continuación, vamos a integrar un proxy para enmascarar esa IP.

Paso nº 3: Recuperar un proxy

Para usar un proxy en tu aplicación Laravel, primero necesitas acceso a un servidor proxy que funcione.

Aunque muchos sitios web ofrecen URL proxy gratuitas, es importante ser prudente: mantener una infraestructura proxy es costoso. Si un servicio ofrece proxies gratuitos, pregúntese cómo se financia. A menudo, la respuesta implica prácticas turbias como la recolección de datos o el redireccionamiento del tráfico.

Nota: Los proxies gratuitos deben utilizarse estrictamente para pruebas o con fines educativos, nunca en entornos de producción.

Si necesitas proxies fiables, busca proveedores de confianza que ofrezcan pruebas gratuitas o planes gratuitos limitados. Por ejemplo, puedes probar nuestros proxies gratuitos.

Ahora, una URL proxy típica tiene este aspecto:

<protocol>://<host>:<port>

Dónde:

  • protocolo es el protocolo necesario para conectarse al servidor proxy (por ejemplo, http, https, socks5)
  • host es la dirección IP o el dominio del servidor proxy
  • port es el puerto utilizado para enrutar el tráfico

En este ejemplo, supongamos que la URL de su proxy es:

http://66.29.154.103:3128

Guárdalo en una variable dentro del método getIP():

$proxyUrl = 'http://66.29.154.103:3128';

¡Es hora de ver cómo utilizar un proxy con Http en Laravel!

Paso #4: Integrar el Proxy en Http

La integración de un proxy en Laravel utilizando el cliente Http sólo requiere una pequeña cantidad de 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 dice al cliente HTTP de Laravel que enrute la petición a través del servidor proxy especificado, usando la opción proxy de Guzzle.

¡Asombroso! Integración proxy Laravel completada.

Paso 5: Ponerlo todo junto

Su lógica final Laravel API con la integración de proxy ahora debe tener este aspecto:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Http;

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ébelo ejecutando Laravel localmente:

php artisan serve

Y conéctate de nuevo al endpoint /api/v1/get-ip:

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 "origen ” muestra la dirección IP del servidor proxy, confirmando que tu IP real está ahora oculta tras el proxy.

Atención: Los servidores proxy gratuitos suelen ser inestables o de corta duración. Para cuando intente esto, puede que el proxy de ejemplo ya no funcione. Si es necesario, sustituye $proxyUrl por uno activo antes de probar.

Nota: Si se producen errores de SSL al realizar la solicitud, consulte los consejos para la solución de problemas que se ofrecen en la sección de casos de uso avanzados que aparece a continuación.

Avances Casos prácticos

Usted acaba 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 proxy

Los proxies premium suelen requerir autenticación para que sólo los usuarios autorizados puedan acceder a ellos. En ese caso, si no especifica las credenciales correctas, obtendrá este error:

cURL error 56: CONNECT tunnel failed, response 407

La URL de un proxy autenticado suele seguir este formato:

<protocol>://<username>:<password>@<host>:<port>

El nombre de usuario y la contraseña son sus credenciales de autenticación.

La clase Http de Laravel (que está basada en Guzzle) soporta proxies autenticados. Por lo tanto, no es necesario cambiar mucho. Basta con incluir 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');

Sustituye el valor de $proxyUrl por una URL proxy autenticada válida.

Http dirigirá ahora el tráfico al servidor proxy autenticado configurado.

Evitar problemas con los certificados SSL

Al configurar un proxy usando el cliente Http de Laravel, tus peticiones pueden fallar debido a errores de verificación de certificados SSL como:

cURL error 60: SSL certificate problem: self-signed certificate in certificate chain

Esto suele ocurrir cuando el servidor proxy utiliza un certificado SSL autofirmado.

Si confías en el servidor proxy y sólo estás realizando pruebas de forma local o en un entorno seguro, puedes desactivar la verificación SSL de esta forma:

$response = Http::withOptions([
    'proxy' => $proxyUrl,
    'verify' => false, // disable SSL certificate verification
])->get('https://httpbin.io/ip');

Advertencia: Desactivar la verificación SSL le expone a ataques man-in-the-middle. Por lo tanto, utilice esta opción solo en entornos de confianza.

De lo contrario, si dispone del archivo de certificado del servidor proxy (por ejemplo, proxy-ca.crt), puede utilizarlo para la verificación SSL de la siguiente forma:

$response = Http::withOptions([
    'proxy' => $proxyUrl,
    'verify' => storage_path('certs/proxy-ca.crt'), // Path to the CA bundle
])->get('https://httpbin.io/ip');

Asegúrese de que el archivo proxy-ca.crt se almacena en un directorio seguro y accesible (por ejemplo, storage/certs/), y Laravel tiene permiso para leerlo.

Con cualquiera de los dos métodos, el error de verificación SSL causado por el proxy debería desaparecer.

Rotación de apoderados

Si sigues utilizando el mismo servidor proxy repetidamente, es probable que el sitio web de destino acabe detectando y bloqueando la dirección IP de ese proxy. Para evitarlo, puedes rotar los servidores proxy y utilizaruno distinto para cada solicitud.

Estos son los pasos para rotar proxies en Laravel:

  1. Crear una matriz que contenga varias URL de proxy
  2. Seleccione uno al azar antes de cada solicitud
  3. Establecer el proxy seleccionado en la configuración del cliente HTTP

Impleméntalo con este código:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Http;

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 del proxy. Aunque este método funciona, tiene algunos inconvenientes:

  1. Debe mantener un grupo de servidores proxy fiables, lo que a menudo tiene un coste.
  2. Para que la rotación sea eficaz, el grupo de proxies debe ser lo suficientemente grande. Sin una reserva grande, se utilizarán repetidamente los mismos proxies, lo que puede provocar su detección y bloqueo.

Para saltarse esas limitaciones, considere la posibilidad de aprovechar la red de proxy rotatorio de Bright Data. Esa infraestructura rota automáticamente las direcciones IP en su nombre y le da acceso a:

  • Más de 1500 millones de IP en 195 países
  • Proxies residenciales, de centros de datos, ISP y móviles
  • Alto tiempo de actividad y una tasa de éxito del 99,9

En la siguiente sección, le mostraremos cómo utilizar los proxies rotativos de Bright Data con Laravel.

Utilizar un proxy de datos Bright en Laravel

Bright Data gestiona una de las mayores redes proxy del mundo, que da servicio a empresas de la lista Fortune 500 y a más de 20.000 clientes. Su red de proxy incluye:

Siga los siguientes pasos para utilizar los proxies residenciales de Bright Data con Laravel.

Si aún no tiene una cuenta, regístrese en Bright Data. Si ya tiene una, inicie sesión para acceder a su panel de usuario:

El cuadro de mandos de Bright Data

Una vez conectado, haga clic en el botón “Obtener productos proxy” para continuar:

Pulsar el botón "Obtener productos proxy

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

Página "Proxies e infraestructura de scraping

En la tabla, busque la fila “Residencial” y haga clic en ella:

Haciendo clic en la fila "residencial

Se le redirigirá a la página de proxy residencial:

La página "residencial

Si es la primera vez, siga las instrucciones del asistente para configurar el servicio proxy según sus necesidades. Si necesitas más ayuda, no dudes en ponerte en contacto con el servicio de asistencia 24/7.

En la pestaña “Visión general”, busca el host, el puerto, el nombre de usuario y la contraseña de tu proxy:

Las credenciales del proxy

Utilice estos datos para construir su URL proxy:

$proxyUrl = 'http://<brightdata_proxy_username>:<brightdata_proxy_password>@<brightdata_proxy_host>:<brightdata_proxy_port>';

eemplace los marcadores de posición (, , , ) con las credenciales reales del proxy.

Asegúrate de activar la opción “Desactivado” para habilitar el producto proxy y sigue el resto de las instrucciones para completar la configuración:

Pulsar el botón de activación

Con su URL proxy configurada, ahora puede integrarla en Laravel utilizando el cliente Http. Aquí 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 proxies Laravel nunca ha sido tan fácil con los proxies auto-rotativos de Bright Data!

[Extra] Integración del proxy HttpClient de Symfony

Supongamos que prefieres el componente HttpClient de Symfony sobre el cliente HTTP Http por defecto de Laravel.

Siga las siguientes instrucciones para implementar la integración de proxy en HttpClient con Laravel.

En primer lugar, es necesario instalar el paquete cliente Symfony HTTP a través de Composer:

composer require symfony/http-client

A continuación, puede utilizar HttpClient de Symfony con un proxy de la siguiente manera:

<?php

namespace App\Http\Controllers;

use Symfony\Contracts\HttpClient\HttpClientInterface;
use Illuminate\Http\JsonResponse;

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 le permite utilizar HttpClient de Symfony para enviar solicitudes a través de un proxy.

Conclusión

En este tutorial de integración de proxies, aprendiste por qué los proxies son importantes y cómo usarlos en Laravel. Cubrimos cómo configurar fácilmente proxies en Laravel, tanto con el cliente HTTP por defecto de Laravel como con el HttpClient de Symfony.

También has visto por qué los servicios proxy gratuitos pueden ser poco fiables e incluso arriesgados. Para obtener un rendimiento estable, seguridad y escalabilidad, debe elegir un proveedor de proxy de confianza. Ahorre tiempo y energía y vaya directamente al mejor proveedor de proxy del mercado, Bright Data.

Cree una cuenta y empiece a probar nuestros proxies gratis hoy mismo.

No se requiere tarjeta de crédito