Comment utiliser les proxy dans Laravel : 2025 Tutoriel

Maîtriser l’utilisation du proxy dans Laravel, de la simple configuration à l’authentification et à la rotation d’IP, pour garantir un web scraping et un accès géographique sans blocage.
4 min de lecture
Laravel Proxies blog image

A la fin de ce guide d’intégration de proxy Laravel, vous aurez compris :

  • Qu’est-ce qu’un proxy et comment fonctionne-t-il dans Laravel ?
  • Quand et pourquoi en avez-vous besoin ?
  • Comment mettre en place un proxy dans votre projet Laravel
  • Comment gérer l’authentification par proxy, les problèmes liés aux certificats SSL et la rotation des adresses IP dans Laravel ?
  • Comment intégrer un proxy dans le composant HttpClient de Symfony ?

Plongeons dans l’aventure !

Qu’est-ce qu’un proxy Laravel ?

Un proxy Laravel agit comme un intermédiaire entre votre backend Laravel et un serveur externe. Il vous permet d’acheminer de manière programmatique le trafic de votre serveur à travers un serveur proxy afin de masquer votre adresse IP.

Voici comment fonctionne un proxy dans Laravel :

  1. Laravel envoie une requête HTTP en utilisant une bibliothèque client HTTP avec un proxy configuré.
  2. La demande passe par le serveur proxy.
  3. Le proxy le transmet au serveur de destination.
  4. Le serveur de destination répond au proxy.
  5. Le proxy renvoie ensuite la réponse à Laravel.

Par conséquent, le serveur de destination voit la requête provenant de l’IP du proxy et non de celle de votre serveur Laravel. Ce mécanisme permet de contourner les restrictions géographiques, d’améliorer l’anonymat et de gérer les limites de débit.

Cas d’utilisation des Proxies dans Laravel

Les proxy dans Laravel sont utiles dans de nombreux scénarios, mais les trois suivants sont les plus courants :

  • Web scraping: Utilisez des proxys pour éviter les interdictions d’IP, les limites de taux ou d’autres blocages lors de la création d’une API de scraping web. Pour en savoir plus, lisez notre tutoriel sur le web scraping avec Laravel.
  • Contourner les limites de débit des API tierces: Rotation des IP proxy pour rester dans les limites des quotas d’utilisation de l’API et éviter l’étranglement.
  • Accéder à des contenus soumis à des restrictions géographiques: Sélectionnez des serveurs proxy dans des régions spécifiques pour accéder à des services disponibles uniquement dans certains pays.

Pour plus d’exemples, consultez notre guide sur les données web et les cas d’utilisation du proxy.

Utiliser un proxy dans Laravel : Guide étape par étape

Dans cette section, nous allons montrer comment intégrer un proxy dans Laravel en utilisant le client HTTP par défaut. Si vous utilisez Symfony HttpClient, ne vous inquiétez pas, nous couvrirons l’intégration de proxy avec cette bibliothèque plus loin dans l’article.

Note: Le client HTTP de Laravel est construit sur Guzzle, vous pouvez donc consulter notre guide d’intégration du proxy Guzzle.

Pour démontrer l’intégration, nous allons créer un point de terminaison GET /api/v1/get-ip qui :

  1. Envoie une requête GET à https://httpbin.io/ip en utilisant le proxy configuré.
  2. Récupère l’adresse IP de sortie de la réponse.
  3. Renvoie cette IP au client qui appelle le point de terminaison Laravel.

Si tout est configuré correctement, l’IP renvoyée par cette API correspondra à l’IP du proxy.

C’est parti !

Étape 1 : Configuration du projet

Si vous avez déjà une application Laravel, vous pouvez sauter cette étape et passer à l’étape 2.

Sinon, suivez les instructions ci-dessous pour créer un nouveau projet Laravel. Ouvrez votre terminal et exécutez la commande Composer create-command suivante pour initialiser un nouveau projet Laravel :

composer create-project laravel/laravel laravel-proxies-application

Cette commande va générer un nouveau projet Laravel dans un dossier nommé laravel-proxies-application. Ouvrez ce dossier dans votre IDE PHP préféré.

A ce stade, le dossier ci-dessus doit contenir la structure de fichiers par défaut de Laravel :

La structure du projet Laravel

C’est formidable ! Vous avez maintenant un projet Laravel en place.

Étape 2 : Définir le point de terminaison de l’API de test

Dans le répertoire du projet, exécutez la commande Artisan suivante pour générer un nouveau contrôleur :

php artisan make:controller IPController

Cela créera un fichier nommé IPController.php dans le répertoire /app/Http/Controllers avec ce contenu par défaut :

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class IPController extends Controller
{
    //
}

Maintenant, ajoutez la méthode getIP() ci-dessous à 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);
}

Cette méthode utilise le client Http de Laravel pour récupérer votre adresse IP sur https://httpbin.io/ip et la renvoie au format JSON.

N’oubliez pas d’importer ces deux importations :

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

Puisque vous voulez que votre application Laravel offre des API sans état, activez le routage API en utilisant la commande install:api Artisan :

php artisan install:api

Pour exposer cette méthode via un point de terminaison API, ajoutez la route suivante au fichier routes/api.php :

use App\Http\Controllers\IPController;

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

Votre nouveau point d’accès à l’API sera accessible à l’adresse suivante :

/api/v1/get-ip

Note: Gardez à l’esprit que chaque API Laravel est disponible sous le chemin /api par défaut.

Il est temps de tester le point de terminaison /api/v1/get-ip!

Démarrez le serveur de développement Laravel en exécutant :

php artisan serve

Votre serveur doit maintenant écouter localement sur le port 8000.

Effectuez une requête GET au point de terminaison /api/v1/get-ip à l’aide de cURL :

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

Remarque: sous Windows, remplacez curl par curl.exe. Pour en savoir plus, consultez notre guide sur l ‘envoi de requêtes GET avec cURL.

Vous devriez obtenir une réponse similaire :

{
  "origin": "45.89.222.18"
}

La réponse ci-dessus est exactement la même que celle produite par le endpoint /ip de HttpBin, ce qui confirme que votre API Laravel fonctionne parfaitement. En particulier, l’adresse IP affichée est l’IP publique de votre machine. Intégrons maintenant un proxy pour masquer cette IP !

Étape 3 : Récupérer un proxy

Pour utiliser un proxy dans votre application Laravel, vous devez d’abord avoir accès à un serveur proxy fonctionnel.

Bien que de nombreux sites web proposent des URL de proxy gratuits, il convient d’être prudent : la maintenance d’une infrastructure de proxy est coûteuse. Si un service fournit des proxys gratuitement, demandez-vous comment il les finance. Souvent, la réponse implique des pratiques douteuses telles que la collecte de données ou le réacheminement du trafic.

Remarque: les proxys gratuits ne doivent être utilisés qu’à des fins de test ou d’éducation, jamais dans des environnements de production.

Si vous avez besoin de proxies fiables, optez pour des fournisseurs réputés qui proposent des essais gratuits ou des plans gratuits limités. Par exemple, vous pouvez essayer nos proxys gratuits.

Une URL de proxy typique ressemble à ceci :

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

Où ?

  • protocole est le protocole requis pour se connecter au serveur proxy (par exemple, http, https, socks5)
  • host est l’adresse IP ou le domaine du serveur proxy
  • port est le port utilisé pour acheminer le trafic

Dans cet exemple, supposons que l’URL de votre proxy soit :

http://66.29.154.103:3128

Stockez-le dans une variable à l’intérieur de la méthode getIP() :

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

Il est temps de voir comment utiliser un proxy avec Http dans Laravel !

Étape 4 : Intégrer le proxy dans Http

L’intégration d’un proxy dans Laravel à l’aide du client Http ne nécessite qu’une petite quantité de configuration supplémentaire :

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

$response = Http::withOptions([
    'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');

$responseData = $response->json();

Comme vous pouvez le voir, tout ce que vous avez à faire est de passer l’URL du proxy comme une option en utilisant la méthode withOptions(). Cela indique au client HTTP de Laravel d’acheminer la requête à travers le serveur proxy spécifié, en utilisant l’option proxy de Guzzle.

C’est incroyable ! L’intégration du proxy Laravel est terminée.

Étape 5 : Assembler le tout

Votre logique API Laravel finale avec l’intégration du proxy devrait maintenant ressembler à ceci :

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

Testez-le en exécutant Laravel localement :

php artisan serve

Et se connecter à nouveau au point de terminaison /api/v1/get-ip :

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

Cette fois, le résultat devrait ressembler à quelque chose comme :

{
  "origin": "66.29.154.103"
}

Le champ "origine" indique l’adresse IP du serveur proxy, ce qui confirme que votre IP réelle est maintenant cachée derrière le proxy.

Avertissement: Les serveurs proxy gratuits sont souvent instables ou de courte durée. Au moment où vous essayez ceci, il se peut que le proxy de l’exemple ne fonctionne plus. Si nécessaire, remplacez $proxyUrl par un proxy actif avant de tester.

Remarque: si vous rencontrez des erreurs SSL lors de la demande, consultez les conseils de dépannage fournis dans la section des cas d’utilisation avancés ci-dessous.

Cas d’utilisation des avancées

Vous venez d’apprendre les bases de l’intégration de proxy avec Laravel, mais il y a d’autres scénarios plus avancés à prendre en compte.

Authentification par proxy

Les proxys Premium nécessitent souvent une authentification afin que seuls les utilisateurs autorisés puissent y accéder. Dans ce cas, si vous ne spécifiez pas les bonnes informations d’identification, vous obtiendrez cette erreur :

cURL error 56: CONNECT tunnel failed, response 407

L’URL d’un proxy authentifié suit généralement ce format :

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

Où le nom d'utilisateur et le mot de passe sont vos données d’authentification.

La classe Http de Laravel (qui est basée sur Guzzle sous le capot) supporte entièrement les proxies authentifiés. Vous n’avez donc pas besoin de changer grand-chose. Il suffit d’inclure les informations d’authentification directement dans l’URL du proxy :

$proxyUrl = '<protocol>://<username>:<password>@<host>:<port>';

Par exemple :

// authenticated proxy with username and password
$proxyUrl = 'http://<username>:<password>@<host>:<port>';

$response = Http::withOptions([
    'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');

Remplacer la valeur de $proxyUrl par une URL de proxy authentifiée valide.

Http va maintenant acheminer le trafic vers le serveur proxy authentifié configuré !

Éviter les problèmes liés aux certificats SSL

Lorsque vous configurez un proxy en utilisant le client Http de Laravel, vos requêtes peuvent échouer à cause d’erreurs de vérification du certificat SSL comme :

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

Cela se produit généralement lorsque le serveur proxy utilise un certificat SSL auto-signé.

Si vous faites confiance au serveur proxy et que vous ne testez que localement ou dans un environnement sûr, vous pouvez désactiver la vérification SSL comme suit :

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

Avertissement: La désactivation de la vérification SSL vous expose à des attaques de type “man-in-the-middle”. N’utilisez donc cette option que dans des environnements de confiance.

Sinon, si vous disposez du fichier de certificat du serveur proxy (par exemple, proxy-ca.crt), vous pouvez l’utiliser pour la vérification SSL comme suit :

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

Assurez-vous que le fichier proxy-ca.crt est stocké dans un répertoire sécurisé et accessible (par exemple, storage/certs/), et que Laravel a la permission de le lire.

Avec l’une ou l’autre méthode en place, l’erreur de vérification SSL causée par le proxy devrait disparaître.

Rotation des procurations

Si vous utilisez le même serveur proxy à plusieurs reprises, le site web cible finira probablement par détecter et bloquer l’adresse IP de ce proxy. Pour éviter cela, vous pouvez alterner vos serveurs proxy, en utilisantun serveur différent pour chaque requête.

Voici les étapes pour faire pivoter les proxies dans Laravel :

  1. Créer un tableau contenant plusieurs URL de proxy
  2. En sélectionner un au hasard avant chaque demande
  3. Définir le proxy sélectionné dans la configuration du client HTTP

Mettez-le en œuvre à l’aide de ce code :

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

L’extrait ci-dessus montre comment sélectionner au hasard un proxy dans une liste pour simuler une rotation de proxy. Bien que cette approche fonctionne, elle présente quelques inconvénients :

  1. Vous devez maintenir un pool de serveurs proxy fiables, ce qui a souvent un coût.
  2. Pour que la rotation soit efficace, le pool de serveurs mandataires doit être suffisamment important. Sans cela, les mêmes serveurs mandataires seront utilisés de manière répétée, ce qui peut entraîner une détection et un blocage.

Pour contourner ces limitations, envisagez de profiter du réseau de proxy rotatif de Bright Data. Cette infrastructure fait automatiquement tourner les adresses IP en votre nom et vous donne accès à :

  • Plus de 1500 millions d’adresses IP dans 195 pays
  • Proxies résidentiels, de centres de données, de FAI et mobiles
  • Temps de disponibilité élevé et taux de réussite de 99,9%.

Dans la prochaine section, nous vous montrerons comment utiliser les proxys rotatifs de Bright Data avec Laravel.

Utiliser un proxy de données Bright dans Laravel

Bright Data exploite l’un des plus grands réseaux de serveurs mandataires au monde, soutenant des entreprises du Fortune 500 et plus de 20 000 clients. Son réseau de serveurs mandataires comprend

Suivez les étapes ci-dessous pour utiliser les proxys résidentiels de Bright Data avec Laravel.

Si vous n’avez pas encore de compte, inscrivez-vous à Bright Data. Si vous en avez déjà un, connectez-vous pour accéder à votre tableau de bord :

Le tableau de bord Bright Data

Une fois connecté, cliquez sur le bouton “Obtenir des produits proxy” pour continuer :

Cliquer sur le bouton "Obtenir des produits proxy".

Vous serez redirigé vers la page “Proxies & Scraping Infrastructure” :

La page "Proxies & Scraping Infrastructure" (en anglais)

Dans le tableau, recherchez la ligne “Résidentiel” et cliquez dessus :

Cliquer sur la ligne "résidentiel

Vous serez dirigé vers la page de procuration résidentielle :

La page "résidentiel

Si c’est votre première fois, suivez l’assistant pour configurer le service proxy en fonction de vos besoins. Pour plus d’assistance, n’hésitez pas à contacter le service d’assistance 24/7.

Dans l’onglet “Aperçu”, recherchez l’hôte, le port, le nom d’utilisateur et le mot de passe de votre proxy :

Les informations d'identification du proxy

Utilisez ces détails pour construire votre URL de proxy :

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

e remplacer les caractères de remplacement (, , , ) par les informations d’identification de votre proxy.

Assurez-vous de basculer le paramètre “Off” pour activer le produit proxy, et suivez le reste des instructions pour terminer l’installation :

Cliquer sur le bouton d'activation

Une fois l’URL du proxy configurée, vous pouvez l’intégrer dans Laravel à l’aide du client Http. Voici la logique pour envoyer une requête via le proxy résidentiel rotatif de Bright Data dans 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);
}

Chaque fois que vous exécuterez le script ci-dessus, vous verrez une IP de sortie différente.

La rotation de proxy Laravel n’a jamais été aussi facile avec les proxies à rotation automatique de Bright Data !

[Extra] Intégration du proxy HttpClient de Symfony

Supposons que vous préfériez le composant HttpClient de Symfony au client HTTP par défaut de Laravel, Http.

Suivez les instructions ci-dessous pour mettre en œuvre l’intégration du proxy dans HttpClient avec Laravel.

Tout d’abord, vous devez installer le paquetage du client HTTP Symfony via Composer :

composer require symfony/http-client

Ensuite, vous pouvez utiliser le HttpClient de Symfony avec un proxy comme suit :

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

Cette configuration vous permet d’utiliser le HttpClient de Symfony pour envoyer des requêtes à travers un proxy.

Conclusion

Dans ce tutoriel sur l’intégration des proxys, vous avez appris pourquoi les proxys sont importants et comment les utiliser dans Laravel. Nous avons vu comment configurer facilement des proxys dans Laravel, à la fois avec le client HTTP par défaut de Laravel et avec le HttpClient de Symfony.

Vous avez également vu pourquoi les services de proxy gratuits peuvent être peu fiables, voire risqués. Pour des performances, une sécurité et une évolutivité stables, vous devez choisir un fournisseur de proxy de confiance. Gagnez du temps et de l’énergie en vous adressant directement au meilleur fournisseur de proxy du marché, Bright Data.

Créez un compte et commencez à tester nos proxies gratuitement dès aujourd’hui !

Aucune carte de crédit requise