Serveur proxy PHP : configurez des proxys avec PHP

Apprenez à configurer un serveur proxy PHP pour améliorer l’extraction de données sur le Web, renforcer la sécurité et contourner les restrictions géographiques.
3 min de lecture
PHP Proxy Server How to Set Up Proxies in PHP

Lorsque l’on se connecte à un réseau, les adresses IP servent d’identifiants uniques facilitant la communication et l’identification au sein de ce réseau et sur Internet. Le serveur proxy fait office d’intermédiaire entre l’appareil de l’utilisateur et Internet. Il améliore la sécurité, la confidentialité et les performances en gérant les requêtes et en masquant l’adresse IP de l’utilisateur.

Les serveurs proxy garantissent l’anonymat et permettent d’écarter les menaces en masquant votre adresse IP et en contrôlant l’accès aux sites Web. En ce qui concerne l’extraction de données sur le Web, les serveurs proxy jouent un rôle crucial en aidant les utilisateurs à contourner les interdictions d’adresses IP et à éviter les restrictions géographiques.

Ce guide vous permettra de mieux connaître les proxys et vous apprendra comment configurer un serveur proxy pour l’extraction de données Web via PHP.

Utilisation d’un serveur proxy avec PHP

Si vous souhaitez configurer un serveur proxy, vous pouvez le faire de différentes manières. Vous pouvez utiliser des serveurs tels que Apache ou Nginx en tant que serveurs proxys directs, ou vous pouvez opter pour des proxys dédiés tels que Squid. Dans ce guide, nous allons utiliser Apache comme serveur proxy.

Pour configurer un serveur proxy pour l’extraction de contenus Web avec PHP, PHP doit être installé sur votre système. Si vous ne l’avez pas encore installé, consultez la documentation officielle pour le faire. Ubuntu est utilisé comme système d’exploitation dans cet article.

Configurer un serveur proxy avec Apache

Utilisez les modules mod_proxymod_proxy_httpou mod_proxy_connect pour vous servir d’Apache comme d’un serveur proxy.

Pour configurer le serveur proxy, vous devez commencer par activer les modules :

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_connect

Ensuite, vous devez créer un nouveau fichier VirtualHost dans lequel vous allez définir le serveur proxy :

cd /etc/apache2/sites-available/
sudo cp 000-default.conf proxy.conf

Dans le fichier proxy.conf , collez le code suivant :

<VirtualHost *:80>
    ServerName localhost
    ServerAdmin admin@localhost
    <IfModule mod_ssl.c>
            SSLEngine off
    </IfModule>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyRequests On
    ProxyVia On
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
</VirtualHost>

Dans ce code, ProxyRequests On permet à Apache de faire office de serveur proxy direct. ProxyVia On ajoute un en-tête Via qui permet d’inspecter le cheminement de la requête dans une chaîne de proxys. En outre, le bloc de contrôle <Proxy> indique qui est autorisé à accéder au proxy. N’importe quel hôte est autorisé à accéder au serveur proxy.

Pour plus d’informations, consultez la documentation officielle.

Pour terminer la configuration du serveur proxy, activez le VirtualHost :

sudo a2ensite proxy.conf
service apache2 reload

Utilisation du serveur proxy

Dans la section suivante, vous apprendrez à utiliser le serveur proxy en langage PHP. En règle générale, toute requête Web ou tout framework d’automatisation fournit un mécanisme permettant de définir des proxys. Dans cet article, vous découvrirez trois méthodes : curl, file_get_contents etSymfony BrowserKit.

Configurer des proxys dans curl

La première méthode que vous allez découvrir consiste à intégrer des proxys dans votre script PHP à l’aide de la bibliothèque cURL , un outil puissant pour formuler des requêtes HTTP.

Créez un fichier nommé curl.php avec le code suivant :

<?php

$proxyUrl = 'http://localhost:80';
$targetUrl = 'https://httpbin.org/get';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $targetUrl);
curl_setopt($ch, CURLOPT_PROXY, $proxyUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo 'cURL Error: ' . curl_error($ch);
} else {
    echo $response;
}

curl_close($ch);

Ce script lance une session curl, définit l’URL cible et l’URL du proxy à l’aide de curl_setoptet exécute la session pour récupérer la réponse. L’option CURLOPT_PROXY configure le proxy. L’URL du proxy est définie sur localhost:80, qui utilise le proxy que vous avez créé à l’étape précédente.

Par souci de simplicité, le script inclut également des options permettant de désactiver la vérification SSL. Veillez toutefois à faire preuve de prudence dans un environnement de production. Toutes les erreurs curl rencontrées lors de l’exécution sont affichées à des fins de débogage.

Exécutez le script avec la commande php curl.php.

Après avoir exécuté le script, vous pouvez consulter le fichier journal des accès Apache pour suivre la requête faite au proxy. Le fichier journal est généralement disponible à l’adresse /var/log/httpd/access.log.

Dans ce fichier journal, vous trouverez une entrée utilisant le protocole CONNECT correspondant au script exécuté, indiquant que la requête a bien été traitée avec un code d’état HTTP 200 :

127.0.0.1 - - [21/Dec/2023:12:34:56 +0530] "CONNECT httpbin.org:443 HTTP/1.1" 200 -

Définir les proxys dans file_get_contents

Vous pouvez également utiliser file_get_contents pour configurer des proxys avec PHP, puis utiliser le proxy Apache pour récupérer le contenu.

Pour ce faire, créez un fichier file_get_contents.php et ajoutez le code suivant :

<?php

$options = [
    'http' => [
        'proxy' => 'tcp://127.0.0.1:80',
        'request_fulluri' => true,
    ],
];
$context = stream_context_create($options);

$response = file_get_contents('https://httpbin.org/get', false, $context);

if ($response === false) {
    echo "Failed to retrieve data from $url";
} else {
    echo $response;
}

Ce code PHP lance une requête HTTP pour récupérer les données de http://wikipedia.org à l’aide d’un serveur proxy déterminé. Les informations du serveur proxy sont spécifiées dans le tableau $options, où la clé « proxy » définit l’adresse du serveur (« tcp: //127.0.0. 1:80 ») et request_fulluri est défini sur « true », traitant l’URI de la requête comme un URI complet.

Un contexte de flux ajoutant ces options est créé à l’aide de stream_context_create. La requête HTTP proprement dite est effectuée avec file_get_contents, en ajoutant le contexte créé et en permettant de récupérer le contenu depuis HttpBin.

Configurer des proxys dans Symfony BrowserKit

Si vous utilisez Symfony , l’intégration de proxys est facile avec BrowserKit.

Si vous voulez suivre le processus et que vous n’avez pas encore installé Symfony, installez-lemaintenant.

Une fois Symfony configuré, vous pouvez facilement utiliser des proxys dans votre code PHP :

<?php

require './vendor/autoload.php';

use Symfony\Component\BrowserKit\HttpBrowser;
use Symfony\Component\HttpClient\HttpClient;

$proxyServer = 'http://127.0.0.1';
$proxyPort = '80';

$client = new HttpBrowser(HttpClient::create(['proxy' => sprintf('%s:%s', $proxyServer, $proxyPort)]));

$client->request('GET', 'https://httpbin.org/get');

$content = $client->getResponse()->getContent();

echo $content;

Ce bloc de code utilise Symfony BrowserKit et HttpClient pour envoyer une requête GET à HttpBin via le proxy Apache configuré dans $proxyURL. Le contenu de la réponse est ensuite récupéré et affiché. L’instance HttpBrowser est configurée avec les paramètres de proxy définis, ce qui facilite l’intégration des proxys dans les applications Symfony.

Limites des méthodes traditionnelles d’intégration de proxys

Bien que la configuration des proxys avec PHP puisse sembler simple, les différentes méthodes comportent certaines limites. Par exemple, bien qu’il soit possible de passer manuellement d’un proxy à l’autre, cette méthode n’est pas efficace pour extraire de grandes quantités de données.

En outre, si le proxy devient indisponible ou si l’adresse IP est bloquée ou rencontre des problèmes, ces méthodes ne prévoient pas nécessairement de mécanisme permettant de basculer automatiquement vers un autre proxy. Cela entraîne des interruptions de service ou des échecs de récupération de données nécessitant une intervention manuelle. Bien que vous puissiez écrire du code pour basculer automatiquement d’un proxy à l’autre, le processus est complexe et vous devrez mettre en place ou louer plusieurs serveurs proxy dans différentes zones géographiques pour une sécurité maximale.

La bonne nouvelle, c’est que Bright Data peut vous aider.

Le serveur proxy Bright Data

Bright Data est une plateforme d’extraction de données Web qui propose des outils d’extraction et de collecte de données à grande échelle. Par exemple, la game complète de serveurs proxy internationaux de Bright Data vous donne accès à diverses adresses IP qui vous permettront de contourner les restrictions géographiques et les exclusions d’adresses IP.

En outre, les proxys à la demande de Bright Data peuvent vous aider à acquérir de manière dynamique les ressources dont vous avez besoin au moment où vous en avez besoin. Cela permet de garantir des performances et une réactivité optimales dans le cadre de l’extraction de données sur le Web avec des exigences fluctuantes. Bright Data propose différents types de proxys (c’est-à-dire des proxys résidentiels, des proxys de datacenters, des proxys de FAI et des proxys mobiles) pour que vous disposiez du proxy le mieux adapté à vos besoins.

L’un des principaux avantages de la solution Bright Data est la rotation automatique des proxys, qui permet de renforcer l’anonymat et de réduire les risques de détection lors des activités d’extraction de contenu sur le Web. Cette fonctionnalité, ainsi que l’accès à un réseau de proxys de datacenters avancé comptant plus de 770 000 adresses IP à travers le monde, font de Bright Data un excellent choix pour l’extraction de données Web.

Utilisation du proxy Bright Data avec PHP

Bright Data est facile à utiliser. Il vous suffit simplement de créer un compte gratuit.

Après avoir créé un compte, cliquez sur Proxies and Scraping Infra dans la barre latérale, puis sélectionnez Get Started dans Residential Proxies :

Configuration du proxy résidentiel Bright Data

Ici, vous pouvez configurer le proxy, par exemple en choisissant entre des proxys dédiés et partagés :

Validation de la configuration du proxy

Une fois que vous avez choisi la configuration de votre proxy, activez le service proxy en cliquant sur Save. Bright Data vous fournit des identifiants de connexion uniques :

Identifiants Bright Data :

Les informations de votre proxy Bright Data vous permettent de l’utiliser pour extraire des données sur Wikipedia. Commencez par créer un fichier scrape.php et ajoutez le code suivant :

<?php

// BrightData proxy details
$proxyUrl = 'Your-proxy-url-from-the access-paramaters';
$proxyUser = 'Your-username:Your-password';

$targetUrl = 'https://en.wikipedia.org/wiki/Proxy_server';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $targetUrl);
curl_setopt($ch, CURLOPT_PROXY, $proxyUrl);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyUser);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo 'cURL Error: ' . curl_error($ch);
} else {
    $dom = new DOMDocument();
    @$dom->loadHTML($response);

    $content = $dom->getElementById('mw-content-text')->textContent;

    $headings = [];
    $headingsNodeList = $dom->getElementsByTagName('h2');
    foreach ($headingsNodeList as $heading) {
        $headings[] = $heading->textContent;
    }

    $headingsNodeList = $dom->getElementsByTagName('h3');
    foreach ($headingsNodeList as $heading) {
        $headings[] = $heading->textContent;
    }

    echo "Content:\n";
    echo $content . "\n\n";

    echo "Headings:\n";
    foreach ($headings as $index => $heading) {
        echo ($index + 1) . ". $heading\n";
    }
}

curl_close($ch);

Remplacez Your-proxy-url-from-the access-paramatersYour-usernameet Your-password par vos identifiants.

Dans ce code, les informations du proxy sont intégrées à la requête curl pour faire en sorte que l’extraction de données Web passe par le réseau proxy de Bright Data.

Ensuite, exécutez php scrape.php dans votre terminal. Voici les résultats obtenus :

Résultats de données extraites de Wikipedia à l’aide de Bright Data

Pour vérifier que vos requêtes sont désormais acheminées via le proxy Bright Data, vous pouvez essayer d’envoyer une requête GET à http://lumtest.com/myip.json. Si vous l’ouvrez dans votre navigateur, il répondra par un objet JSON contenant les informations relatives à votre fournisseur d’accès Internet.

Pour essayer avec un proxy Bright Data, enregistrez le code suivant dans un nouveau fichier PHP et exécutez-le :

<?php

// BrightData proxy details
$proxyUrl = 'brd.superproxy.io:22225';
$proxyUser = 'brd-customer-hl_0c2320f1-zone-residential_proxy1:j30hm0h2pqde';

$targetUrl = 'http://lumtest.com/myip.json';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $targetUrl);
curl_setopt($ch, CURLOPT_PROXY, $proxyUrl);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyUser);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo 'cURL Error: ' . curl_error($ch);
} else {
    echo $response;
}

curl_close($ch);

Vous devriez voir apparaître l’emplacement du proxy utilisé, ainsi que d’autres informations sur celui-ci :

{"ip":"91.66.16.153","country":"DE","asn":{"asnum":3209,"org_name":"Vodafone GmbH"},"geo":{"city":"Berlin","region":"BE","region_name":"Land Berlin","postal_code":"12205","latitude":52.428,"longitude":13.3095,"tz":"Europe/Berlin","lum_city":"berlin","lum_region":"be"}}

Cela permet de vérifier que la requête a bien été acheminée via les serveurs proxy de Bright Data.

Conclusion

Ce guide vous a fait découvrir différentes méthodes pour mettre en place un serveur proxy avec PHP. Vous pouvez vous contenter de serveurs proxy locaux fonctionnant avec Apache, mais les serveurs proxy de Bright Data sont plus efficaces et plus polyvalents.

Les serveurs proxy de Bright Data constituent un réseau proxy mondial complet, qui vous donne accèss à un large éventail d’adresses IP résidentielles, de fournisseurs d’accès Internet, de datacenterset de proxys mobiles. En outre, la rotation des proxys Bright Data garantit un meilleur anonymat et atténue les risques de détection des activités d’extraction de données Web.

Que vous soyez un(e) débutant’e) en quête de simplicité ou un(e) développeur/euse expérimenté(e) ayant besoin de fonctionnalités avancées, les serveurs proxy Bright Data constituent une base solide pour des opérations d’extraction de données Web réussies et efficaces.