Serveurs proxy Go – Guide Go de configuration de proxies

Dans ce guide, vous apprendrez à configuer un serveur proxy pour le moissonnage dans Go.
28 min de lecture
Setting Proxy in GO

Toute interaction sur Internet nécessite l’utilisation d’une adresse IP . Les sites Web utilisent l’adresse IP pour identifier les utilisateurs et déterminer des informations telles que l’emplacement géographique, le fournisseur d’accès internet, le fuseau horaire et le type d’appareil utilisé. Les serveurs Web utilisent ces données pour personnaliser ou limiter l’accès au contenu ou aux ressources. En d’autres termes, lors du moissonnage, les sites Web peuvent bloquer les requêtes provenant d’une adresse IP si elles sont considérées comme présentant un modèle de trafic inhabituel, une activité bot ou des intentions malveillantes. L’utilisation de serveurs proxy peut heureusement permettre de contourner ces restrictions.

Un serveur proxy est un intermédiaire entre un utilisateur et Internet. Il reçoit les demandes des utilisateurs, les transmet aux ressources Web et renvoie ensuite les données obtenues. En cachant votre véritable adresse IP, un serveur proxy vous aident à naviguer et à moissonner de manière discrète, renforçant ainsi la sécurité, la confidentialité et l’anonymat.

Les serveurs proxy offrent également la possibilité de contourner les restrictions d’adresse IP en la modifiant, ce qui donne l’impression que les requêtes proviennent de différents utilisateurs. En utilisant des serveurs mandataires situés dans diverses régions, vous pouvez accéder à des contenus géospécifiques, tels que des films ou des actualités, en contournant les blocages géographiques.

Dans ce guide, vous apprendrez à configurer un serveur proxy pour le moissonnage avec Go Vous découvrirez également les serveurs proxy de Bright Data et comment ils peuvent simplifier ce processus.

Configurer un serveur proxy

Dans ce guide, vous apprendrez à modifier une application de moissonnage écrite en Go pour interagir avec le site It’s FOSS via un serveur proxy local ou auto-hébergé. Le guide présuppose que vous avez déjà configuré votre environnement de développement Go.

Pour commencer, vous devez configurer votre serveur proxy en utilisant Squid, un logiciel de serveur proxy open source. Si vous préférez utiliser un autre logiciel de serveur proxy, vous pouvez également le faire. Ici, nous utiliserons Squid sur une boîte Linux Fedora 39. La plupart des distributions Linux utilisent Squid par défaut dans les référentiels. Vous pouvez également consulter la documentation pour télécharger les packages nécessaires à votre système d’exploitation.

Depuis votre terminal, exécuter la commande suivante pour installer Squid :

dnf install squid -y

Une fois terminé, démarrer le service en exécutant la commande ci-après :

sudo systemctl enable --now squid

Vérifier l’état du service à l’aide de cette commande :

sudo systemctl status squid

La sortie devrait ressembler à ceci :

Serveurs proxy Go

Cela indique que le service est actif et en cours d’exécution. Par défaut, Squid s’exécute et écoute les requêtes sur le port 3128. Utiliser la commande Curl suivante pour tester la communication via le serveur proxy :

curl --proxy 127.0.0.1:3128 "http://lumtest.com/myip.json"

Votre réponse devrait ressembler à ceci :

curl --proxy 127.0.0.1:3128 "http://lumtest.com/myip.json"
{"ip":"196.43.196.126","country":"GH","asn":{"asnum":327695,"org_name":"AITI"},"geo":{"city":"","region":"","region_name":"","postal_code":"","latitude":8.1,"longitude":-1.2,"tz":"Africa/Accra"}}

Les métadonnées doivent inclure votre adresse IP publique ainsi que le pays et l’organisation propriétaires. Elles servent à confirmer que vous avez installé avec succès un serveur proxy fonctionnel.

Configurer le scraper de démonstration

Pour simplifier votre tâche, une application Go de moissonnage est disponible dans ce référentiel GitHub. Cette application capture le titre, le snippet et les catégories des derniers articles sur It’s FOSS, un blog populaire dédié aux logiciels à code source ouvert. Le scraper visite ensuite Lumtest afin d’obtenir des informations sur l’adresse IP utilisée par le client HTTP pour interagir avec le Web. La même logique est implémentée en utilisant trois packages Go différents : Colly, goquery et Selenium. Dans la section suivante, vous apprendrez comment modifier chaque implémentation pour utiliser un serveur proxy.

Pour commencer, cloner le référentiel en exécutant la commande suivante dans votre terminal/shell préféré :

$ git clone https://github.com/rexfordnyrk/go_scrap_proxy.git

Ce référentiel se compose de deux branches : la branche principale , qui contient le code finalisé, et la branche de base , qui contient le code initial que vous allez modifier. Utiliser la commande suivante pour passer de checkout à la branche de base :

$ git checkout basic

Cette branche contient trois fichiers .go pour chaque implémentation de bibliothèque du scraper sans qu’un proxy ne soit configuré. Elle contient également un fichier exécutable chromedriver, requis par l’implémentation Selenium du scraper :

.
├── chromedriver
├── colly.go
├── go.mod
├── goquery.go
├── go.sum
├── LICENSE
├── README.md
└── selenium.go

1 directory, 8 files

Il est possible d’exécuter chacun de ces fichiers individuellement à l’aide de la commande go run et le nom du fichier en question. Par exemple, la commande suivante exécute le scraper avec Colly :

go run ./colly.go 

La sortie devrait ressembler à ceci :

$ go run ./colly.go

Article 0: {"category":"Newsletter ✉️","excerpt":"Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.","title":"FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and More"}
Article 1: {"category":"Tutorial","excerpt":"Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.","title":"How to Use Tiling Assistant on GNOME Desktop?"}
Article 2: {"category":"Linux Commands","excerpt":"The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.","title":"Free Command Examples"}
Article 3: {"category":"Gaming 🎮","excerpt":"Here are the best tips to make your Linux gaming experience enjoyable.","title":"7 Tips and Tools to Improve Your Gaming Experience on Linux"}
Article 4: {"category":"Newsletter ✉️","excerpt":"The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.","title":"FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Year"}
Article 5: {"category":"Tutorial","excerpt":"Wondering which init service your Linux system uses? Here's how to find it out.","title":"How to Check if Your Linux System Uses systemd"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}

Check Proxy IP map[asn:map[asnum:29614 org_name:VODAFONE GHANA AS INTERNATIONAL TRANSIT] country:GH geo:map[city:Accra latitude:5.5486 longitude:-0.2012 lum_city:accra lum_region:aa postal_code: region:AA region_name:Greater Accra Region tz:Africa/Accra] ip:197.251.144.148]

La sortie contient toutes les informations sur les articles d’ It’s FOSS. Au bas de la sortie, vous trouverez les informations IP renvoyées par Lumtest vous indiquant la connexion actuelle utilisée par le scraper. L’exécution des trois implémentations devrait donner des réponses similaires. Une fois que vous avez testé ces trois implémentations, vous êtes prêt à scraper avec un proxy local.

Implémenter des scrapers avec un proxy local

Dans cette section, vous explorerez les trois implémentations du scraper et les modifierez pour utiliser votre serveur proxy. Chaque fichier .go se compose de la fonction main() où l’application démarre et de la fonction ScrapeWithLibrary() contenant les instructions pour le scraper.

Utiliser goquery avec un proxy local

goquery est une bibliothèque pour Go qui fournit un ensemble de méthodes et de fonctionnalités pour analyser et manipuler des documents HTML, de la même manière que jQuery fonctionne pour JavaScript. Goquery est particulièrement utile pour le moissonnage car elle permet de parcourir, d’interroger et de manipuler la structure des pages HTML. Cependant, cette bibliothèque ne gère pas les requêtes réseau ou les opérations d’aucune sorte, ce qui signifie que vous devez obtenir et ensuite lui fournir la page HTML.

Si vous naviguez jusqu’au fichier goquery.go , vous trouverez l’implémentation goquery du scraper. L’ouvrir dans votre IDE ou éditeur de texte préféré.

Dans la fonction ScrapeWithGoQuery() , modifier le transport du client HTTP avec l’URL de votre serveur proxy HTTP, une combinaison du nom d’hôte ou de l’adresse IP et du port au format http://HOST:PORT.

Veiller à importer le package net/url dans ce fichier. Coller et remplacer la définition du client HTTP par le snippet suivant :

...

func ScrapeWithGoquery() {
    // Define the URL of the proxy server
    proxyStr := "http://127.0.0.1:3128"

    // Parse the proxy URL
    proxyURL, err := url.Parse(proxyStr)
    if err != nil {
        fmt.Println("Error parsing proxy URL:", err)
        return
    }

    //Create an http.Transport that uses the proxy
    transport := &http.Transport{
        Proxy: http.ProxyURL(proxyURL),
    }

    // Create an HTTP client with the transport
    client := &http.Client{
        Transport: transport,
    }
    
... 

Ce snippet modifie le client HTTP avec un transport configuré pour utiliser le serveur proxy local. S’assurer de remplacer l’adresse IP par l’adresse IP de votre serveur proxy.

Exécuter maintenant cette implémentation à l’aide de la commande suivante depuis le répertoire du projet :

go run ./goquery.go

La sortie devrait ressembler à ceci :

$ go run ./goquery.go

Article 0: {"category":"Newsletter ✉️","excerpt":"Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.","title":"FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and More"}
Article 1: {"category":"Tutorial","excerpt":"Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.","title":"How to Use Tiling Assistant on GNOME Desktop?"}
Article 2: {"category":"Linux Commands","excerpt":"The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.","title":"Free Command Examples"}
Article 3: {"category":"Gaming 🎮","excerpt":"Here are the best tips to make your Linux gaming experience enjoyable.","title":"7 Tips and Tools to Improve Your Gaming Experience on Linux"}
Article 4: {"category":"Newsletter ✉️","excerpt":"The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.","title":"FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Year"}
Article 5: {"category":"Tutorial","excerpt":"Wondering which init service your Linux system uses? Here's how to find it out.","title":"How to Check if Your Linux System Uses systemd"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}

Check Proxy IP map[asn:map[asnum:29614 org_name:VODAFONE GHANA AS INTERNATIONAL TRANSIT] country:GH geo:map[city:Accra latitude:5.5486 longitude:-0.2012 lum_city:accra lum_region:aa postal_code: region:AA region_name:Greater Accra Region tz:Africa/Accra] ip:197.251.144.148]

Utiliser Colly avec un proxy local

Colly est un framework de moissonnage efficace et polyvalent pour Go, réputé pour son API conviviale et son intégration transparente avec des bibliothèques d’analyse HTML comme goquery. Contrairement à goquery, Colly prend en charge et fournit une API pour gérer divers comportements liés au réseau. Cela inclut les requêtes asynchrones pour le moissonnage à haut débit, la mise en cache locale et la limitation du débit pour assurer une utilisation efficace et responsable des ressources Web, la gestion automatique des cookies et des sessions, les agents utilisateurs personnalisables et la gestion complète des erreurs. De plus, Colly prend en charge l’utilisation de proxy avec commutation ou rotation et il peut être étendu à des tâches telles que l’extraction de contenu généré par JavaScript, en s’intégrant à des navigateurs headless.

Ouvrir le fichier colly.go dans votre éditeur ou votre IDE et coller les lignes de code suivantes, immédiatement après avoir initialisé un nouveau collecteur dans la fonction ScrapeWithColly() :

...
    // Define the URL of the proxy server
    proxyStr := "http://127.0.0.1:3128"
    // SetProxy sets a proxy for the collector
    if err := c.SetProxy(proxyStr); err != nil {
        log.Fatalf("Error setting proxy configuration: %v", err)
    }
    
...

Ce snippet utilise la méthode setProxy() de Colly pour définir le serveur proxy à utiliser par cette instance de collecteur pour les requêtes réseau.

Exécuter maintenant cette implémentation à l’aide de la commande suivante depuis le répertoire du projet :

go run ./colly.go

La sortie devrait ressembler à ceci :

$ go run ./colly.go

Article 0: {"category":"Newsletter ✉️","excerpt":"Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.","title":"FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and More"}
Article 1: {"category":"Tutorial","excerpt":"Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.","title":"How to Use Tiling Assistant on GNOME Desktop?"}
Article 2: {"category":"Linux Commands","excerpt":"The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.","title":"Free Command Examples"}
Article 3: {"category":"Gaming 🎮","excerpt":"Here are the best tips to make your Linux gaming experience enjoyable.","title":"7 Tips and Tools to Improve Your Gaming Experience on Linux"}
Article 4: {"category":"Newsletter ✉️","excerpt":"The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.","title":"FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Year"}
Article 5: {"category":"Tutorial","excerpt":"Wondering which init service your Linux system uses? Here's how to find it out.","title":"How to Check if Your Linux System Uses systemd"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}

Check Proxy IP map[asn:map[asnum:29614 org_name:VODAFONE GHANA AS INTERNATIONAL TRANSIT] country:GH geo:map[city:Accra latitude:5.5486 longitude:-0.2012 lum_city:accra lum_region:aa postal_code: region:AA region_name:Greater Accra Region tz:Africa/Accra] ip:197.251.144.148]

Utiliser Selenium avec un proxy local

Selenium est un outil principalement utilisé pour automatiser les interactions avec le navigateur Web dans le cadre de tests d’applications. Il est capable d’effectuer des tâches telles que cliquer sur des boutons, saisir du texte et extraire des données de pages Web, ce qui le rend idéal pour récupérer du contenu avec des interactions automatisées. L’imitation des interactions réelles des utilisateurs est rendue possible par WebDriver, que Selenium utilise pour contrôler les navigateurs. Bien que cet exemple utilise Chrome, Selenium est également compatible avec d’autres navigateurs, notamment Firefox, Safari et Internet Explorer.

Le service Selenium WebDriver vous permet de fournir un proxy et d’autres configurations pour influencer le comportement du navigateur sous-jacent lors de l’interaction avec le Web, tout comme un navigateur réel. Programmatiquement, cela peut être configuré via la définition selenium.Capabilities{} .

Pour utiliser Selenium avec un proxy local, modifier le fichier selenium.go dans ScrapeWithSelenium() et remplacer la définition selenium.Capabilities{} par le snippet suivant :

...

    // Define proxy settings
    proxy := selenium.Proxy{
        Type: selenium.Manual,
        HTTP: "127.0.0.1:3128", // Replace with your proxy settings
        SSL:  "127.0.0.1:3128", // Replace with your proxy settings
    }

    // Configuring the WebDriver instance with the proxy
    caps := selenium.Capabilities{
        "browserName": "chrome",
        "proxy":       proxy,
    }
    
...

Ce dernier définit les différents paramètres de proxy pour Selenium et est utilisé pour configurer les fonctionnalités de Selenium pour le WebDriver. Lors de la prochaine exécution, la connexion proxy sera utilisée.

Exécuter maintenant l’implémentation à l’aide de la commande ci-après depuis le répertoire du projet :

go run ./selenium.go

La sortie devrait ressembler à ceci :

$ go run ./selenium.go

Article 0: {"category":"Newsletter ✉️","excerpt":"Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.","title":"FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and More"}
Article 1: {"category":"Tutorial","excerpt":"Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.","title":"How to Use Tiling Assistant on GNOME Desktop?"}
Article 2: {"category":"Linux Commands","excerpt":"The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.","title":"Free Command Examples"}
Article 3: {"category":"Gaming 🎮","excerpt":"Here are the best tips to make your Linux gaming experience enjoyable.","title":"7 Tips and Tools to Improve Your Gaming Experience on Linux"}
Article 4: {"category":"Newsletter ✉️","excerpt":"The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.","title":"FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Year"}
Article 5: {"category":"Tutorial","excerpt":"Wondering which init service your Linux system uses? Here's how to find it out.","title":"How to Check if Your Linux System Uses systemd"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}

Check Proxy IP {"ip":"197.251.144.148","country":"GH","asn":{"asnum":29614,"org_name":"VODAFONE GHANA AS INTERNATIONAL TRANSIT"},"geo":{"city":"Accra","region":"AA","region_name":"Greater Accra Region","postal_code":"","latitude":5.5486,"longitude":-0.2012,"tz":"Africa/Accra","lum_city":"accra","lum_region":"aa"}}

Bien que vous puissiez assurer vous-même la maintenance d’un serveur proxy, vous êtes confronté(e) à divers défis, notamment la nécessité de configurer de nouveaux serveurs dans différentes régions ainsi que d’autres problèmes liés à maintenance et de sécurité.

Serveurs proxy Bright Data

Bright Data propose une infrastructure réseau proxy mondiale primée avec un ensemble complet de serveurs proxy et de services pouvant être utilisés à diverses fins de collecte de données Web.

Grâce au réseau mondial étendu de serveurs mandataires Brigh Data, vous pouvez facilement accéder à des données et les collecter à partir de différents sites internationaux. Bright Data fournit également une gamme de types de proxy, dont plus de 350 millions de proxies uniques résidentielsISPdatacenteret mobiles , chacun offrant ses propres avantages, tels que la légitimité, la vitesse et la fiabilité, pour des tâches spécifiques de collecte de données.

En outre, le système de rotation de proxy de Bright Data garantit un anonymat optimal et minimise la détection, ce qui le rend idéal pour la collecte de données en continu et à grande échelle.

Configurer un proxy résidentiel avec Bright Data

Il est facile d’obtenir un proxy résidentiel avec Bright Data. Il vous suffit de vous inscrire pour un essai gratuit. Une fois inscrit(e), vous verrez apparaître ce qui suit :

Tableau de bord BD

Cliquer sur le bouton Démarrer pour Proxies résidentiels.

Le formulaire suivant devra alors être renseigné :

Configuration de proxies résidentiels BD

Nommer cette instance. Ici, il s’agit de my_go_demo_proxy. Vous devez également spécifier le type d’IP à provisionner : sélectionner Partagé (si vous souhaitez utiliser des proxies partagés). Indiquer ensuite le niveau de géolocalisation que vous souhaitez imiter lors de l’accès au contenu Web. Par défaut, il s’agit du niveau ou de la zone du pays . Indiquer également si vous souhaitez que les pages Web demandées soient mises en cache. Pour l’instant, désactiver la mise en cache.

Après avoir renseigné ces informations, cliquer sur Ajouter pour créer et mettre en place votre proxy résidentiel.

Activer ensuite celui-ci. En tant que nouvel utilisateur, il vous sera d’abord demandé de fournir vos informations de facturation. Une fois cette étape terminée, accéder à votre tableau de bord et cliquer sur le proxy résidentiel que vous venez de créer :

Configurer des proxies dans Go

S’assurer que l’onglet Paramètres d’accès est sélectionné.

Vous trouverez ici les différents paramètres nécessaires à l’utilisation du proxy résidentiel, tels que l’hôte, le port et les informations d’authentification. Vous aurez bientôt besoin de ces informations.

Il est maintenant temps d’intégrer votre proxy résidentiel Bright Data aux trois implémentations du scraper. Il s’agit d’un processus similaire à celui qui a été effectué pour le serveur local, mais vous devez également inclure l’authentification. De plus, en interagissant avec le Web de manière programmatique, il ne sera peut-être pas possible d’examiner et d’accepter les certificats SSL du serveur proxy comme vous le feriez dans un navigateur doté d’une interface utilisateur graphique. Vous devez donc désactiver programmatiquement la vérification des certificats SSL sur votre client Web pour que vos requêtes ne soient pas interrompues.

Commencer par créer un annuaire appelé brightdata dans l’annuaire du projet et y copier les trois fichiers .go. La structure de votre annuaire devrait maintenant ressembler à ceci :

.
├── brightdata
│   ├── colly.go
│   ├── goquery.go
│   └── selenium.go
├── chromedriver
├── colly.go
├── go.mod
├── goquery.go
├── go.sum
├── LICENSE
├── README.md
└── selenium.go

2 directories, 11 files

Par la suite, vous modifierez les fichiers de l’annuaire brightdata .

Utiliser goquery avec un proxy résidentiel Bright Data

Dans la fonction ScrapeWithGoQuery() , modifier la variable proxieStr pour inclure les informations d’authentification dans l’URL du proxy au format http://USERNAME:PASSWORD@HOST:PORT. Remplacer la définition actuelle par le snippet suivant :

...

func ScrapeWithGoquery() {
    // Define the proxy server with username and password
    proxyUsername := "username" //Your residential proxy username 
    proxyPassword := "your_password" //Your Residential Proxy password here
    proxyHost := "server_host" //Your Residential Proxy Host
    proxyPort := "server_port"  //Your Port here
    
    proxyStr := fmt.Sprintf("http://%s:%s@%s:%s", url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)
    
    // Parse the proxy URL
...

Modifier ensuite le transport du client HTTP avec une configuration permettant d’ignorer la vérification du certificat SSL/TLS du serveur proxy. Commencer par ajouter le package crypto/tls à vos importations. Remplacer ensuite la définition http.Transport par le snippet suivant après avoir analysé l’URL du proxy :

...

func ScrapeWithGoquery() {
    
    // Parse the proxy URL
...

    //Create an http.Transport that uses the proxy
    transport := &http.Transport{
        Proxy: http.ProxyURL(proxyURL),
        TLSClientConfig: &tls.Config{
            InsecureSkipVerify: true, // Disable SSL certificate verification
        },
    }

    // Create an HTTP client with the transport
... 

Ce snippet modifie le client HTTP avec un transport configuré pour utiliser le serveur proxy local. S’assurer de remplacer l’adresse IP par celle de votre serveur proxy.

Exécuter maintenant cette implémentation à l’aide de la commande suivante depuis l’annuaire du projet :

go run brightdata/goquery.go 

La sortie devrait ressembler à ceci :

$ go run brightdata/goquery.go 

Article 0: {"category":"Newsletter ✉️","excerpt":"Open source rival to Twitter, a hyped new terminal and a cool new Brave/Chrome feature among many other things.","title":"FOSS Weekly #24.07: Fedora Atomic Distro, Android FOSS Apps, Mozilla Monitor Plus and More"}
Article 1: {"category":"Explain","excerpt":"Intel makes things confusing, I guess. Let's try making the processor naming changes simpler.","title":"Intel Processor Naming Changes: All You Need to Know"}
Article 2: {"category":"Linux Commands","excerpt":"The Cut command lets you extract a part of the file to print without affecting the original file. Learn more here.","title":"Cut Command Examples"}
Article 3: {"category":"Raspberry Pi","excerpt":"A UART attached to your Raspberry Pi can help you troubleshoot issues with your Raspberry Pi. Here's what you need to know.","title":"Using a USB Serial Adapter (UART) to Help Debug Your Raspberry Pi"}
Article 4: {"category":"Newsletter ✉️","excerpt":"Damn Small Linux resumes development after 16 years.","title":"FOSS Weekly #24.06: Ollama AI, Zorin OS Upgrade, Damn Small Linux, Sudo on Windows and More"}
Article 5: {"category":"Tutorial","excerpt":"Zorin OS now provides a way to upgrade to a newer major version. Here's how to do that.","title":"How to upgrade to Zorin OS 17"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you’re using? Here’s how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}

Check Proxy IP map[asn:map[asnum:7922 org_name:COMCAST-7922] country:US geo:map[city:Crown Point latitude:41.4253 longitude:-87.3565 lum_city:crownpoint lum_region:in postal_code:46307 region:IN region_name:Indiana tz:America/Chicago] ip:73.36.77.244]

Vous remarquerez que même si vous moissonnez les mêmes articles, la vérification de l’adresse IP du proxy a renvoyé des informations différentes, indiquant que vous naviguez depuis un lieu ou un pays différent.

Utiliser Colly avec un proxy résidentiel Bright Data

Même si Colly ne fournit pas de méthode pour désactiver la vérification SSL/TLS programmatiquement, il offre une alternative où vous pouvez fournir votre propre transport à utiliser par son client HTTP.

Avec le fichier colly.go ouvert dans votre éditeur ou votre IDE, coller les lignes de code suivantes après avoir initialisé un nouveau collecteur dans la fonction ScrapeWithColly() (ne pas oublier d’ajouter les importations net/url et net/http) :

...
func ScrapeWithColly() {
    ...
    
    //Create an http.Transport that uses the proxy
    transport := &http.Transport{
        TLSClientConfig: &tls.Config{
            InsecureSkipVerify: true, // Disable SSL certificate verification
        },
    }
    
    // Set the collector instance to use the configured transport
    c.WithTransport(transport)
    
    
...

Ce snippet définit un transport HTTP avec la vérification SSL désactivée et utilise la méthode Colly WithTransport() pour définir le transport du collecteur pour les requêtes réseau.

Modifier la variable proxyStr afin qu’elle contienne les informations d’identification du proxy résidentiel (comme vous l’avez déjà fait pour goquery). Remplacer la ligne proxyStr par le snippet suivant :

...

    // Define the proxy server with username and password
    proxyUsername := "username" //Your residential proxy username 
    proxyPassword := "your_password" //Your Residential Proxy password here
    proxyHost := "server_host" //Your Residential Proxy Host
    proxyPort := "server_port"  //Your Port here

    proxyStr := fmt.Sprintf("http://%s:%s@%s:%s", url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)

...

Ne pas oublier de remplacer les valeurs de chaîne par celles de la page Paramètres d’accès de votre proxy résidentiel.

Exécuter ensuite cette implémentation à l’aide de la commande ci-après depuis l’annuaire du projet :

go run brightdata/colly.go
go run brightdata/colly.go 
…

Check Proxy IP map[asn:map[asnum:2856 org_name:British Telecommunications PLC] country:GB geo:map[city:Turriff latitude:57.5324 longitude:-2.3883 lum_city:turriff lum_region:sct postal_code:AB53 region:SCT region_name:Scotland tz:Europe/London] ip:86.180.236.254]

Dans la partie « Vérifier l’adresse IP du proxy » de la sortie, vous remarquerez le changement de pays même si des informations d’identification identiques sont utilisées.

Utiliser Sélénium avec un proxy résidentiel Bright Data

Lorsque vous travaillez avec Selenium, vous devez modifier la définition selenium.Proxy{} pour utiliser la chaîne d’URL du proxy avec les informations d’identification. Remplacer la définition du proxy actuelle par la suivante :

...

    // Define the proxy server with username and password
    proxyUsername := "username"      //Your residential proxy username
    proxyPassword := "your_password" //Your Residential Proxy password here
    proxyHost := "server_host"       //Your Residential Proxy Host
    proxyPort := "server_port"       //Your Port here

    proxyStr := fmt.Sprintf("http://%s:%s@%s:%s", url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)

    // Define proxy settings
    proxy := selenium.Proxy{
        Type: selenium.Manual,
        HTTP: proxyStr,
        SSL:  proxyStr,
    }
    
...

Ne pas oublier d’importer le package net/url.

Ce snippet définit les différents paramètres du proxy et est fusionné pour créer l’URL du proxy utilisée dans sa configuration.

À présent, configurer le Chrome WebDriver avec des options permettant de désactiver la vérification SSL lors de l’utilisation du proxy résidentiel, de la même manière que pour les implémentations précédentes. Pour cela, modifier les arguments de définition chromeCaps pour inclure l’option --ignore-certificate-errors comme suit :

... 
    caps.AddChrome(chrome.Capabilities{Args: []string{
        "--headless=new", // Start browser without UI as a background process
        "--ignore-certificate-errors", // // Disable SSL certificate verification
    }})
...

Par défaut, Selenium ne prend pas en charge la configuration d’un proxy authentifié. Cependant, vous pouvez contourner ce problème en utilisant un package pour créer une extension Chrome et obtenir une connexion proxy authentifiée.

Tout d’abord, ajouter le package à votre projet à l’aide de la commande go get :

go get https://github.com/rexfordnyrk/proxyauth

Puis importer le package dans le fichier brightdata/selenium.go en ajoutant la ligne "github.com/rexfordnyrk/proxyauth" dans le bloc d’importation situé en haut du fichier.

Créer maintenant l’extension Chome à l’aide de la méthode BuildExtension() du package proxyauth et lui transmettre vos informations d’identification du proxy résidentiel Bright Data. Pour cela, coller le snippet suivant après la définition chromeCaps mais avant la ligne caps.AddChrome(chromeCaps) :

…
    //Building proxy auth extension using BrightData Proxy credentials
    extension, err := proxyauth.BuildExtention(proxyHost, proxyPort, proxyUsername, proxyPassword)
    if err != nil {
        log.Fatal("BuildProxyExtension Error:", err)
    }

    //including the extension to allow proxy authentication in chrome
    if err := chromeCaps.AddExtension(extension); err != nil {
        log.Fatal("Error adding Extension:", err)
    }

…

Ce snippet crée une extension Chrome et l’ajoute au Chrome WebDriver pour activer des requêtes Web authentifiées via les informations d’identification du proxy fournies.

Vous pouvez exécuter cette implémentation à l’aide de cette commande depuis l’annuaire du projet :

go run brightdata/selenium.go

La sortie devrait ressembler à ceci :

$ go run brightdata/selenium.go 

Article 0: {"categoryText":"Newsletter ✉️","excerpt":"Check out the promising new features in Ubuntu 24.04 LTS and a new immutable distro.","title":"FOSS Weekly #24.08: Ubuntu 24.04 Features, Arkane Linux, grep, Fedora COSMIC and More"}
…
Article 8: {"categoryText":"Ubuntu","excerpt":"Wondering which Ubuntu version you’re using? Here’s how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}

Check Proxy IP {"ip":"176.45.169.166","country":"SA","asn":{"asnum":25019,"org_name":"Saudi Telecom Company JSC"},"geo":{"city":"Riyadh","region":"01","region_name":"Riyadh Region","postal_code":"","latitude":24.6869,"longitude":46.7224,"tz":"Asia/Riyadh","lum_city":"riyadh","lum_region":"01"}}

Encore une fois, si vous examinez les informations IP au bas de la sortie, vous remarquerez qu’un autre pays est également utilisé pour envoyer la demande. Voici donc le système de rotation du proxy Bright Data en action.

Comme vous pouvez le constater, utiliser Bright Data dans votre application Go est très simple. Pour commencer, créer le proxy résidentiel sur la plateforme Bright Data et obtenir vos informations d’identification. Ensuite, utiliser ces informations pour modifier votre code afin d’utiliser le proxy pour le Web.

Conclusion

Les serveurs proxy Web jouent un rôle crucial dans les interactions personnalisées des utilisateurs sur Internet. Dans ce guide, vous avez acquis une compréhension approfondie des serveurs proxy et appris comment configurer un serveur proxy auto-hébergé à l’aide de Squid. De plus, vous avez découvert comment intégrer un serveur proxy local dans vos applications Go, comme dans le cas d’un scraper.

Si vous envisagez de travailler avec des serveurs proxy, Bright Data est une option à considérer. Son réseau proxy de pointe peut vous aider à collecter rapidement des données sans vous soucier de l’infrastructure ou de la maintenance supplémentaire.