Article title on dark background

Toute activité en ligne laisse une trace et peut parfois compromettre votre sécurité ou vous empêcher de faire du scraping web. Les proxies vous aident à contourner les systèmes anti-détection sans entraver vos tâches. Dans cet article, nous vous montrons comment intégrer les proxies DataImpulse en C# avec .NET, afin que vous n’ayez plus à vous soucier des rate limits ni des failles susceptibles d’être exploitées par des acteurs malveillants.

Bien démarrer

Tout d’abord, assurez-vous que les outils nécessaires sont installés sur votre appareil:

  • Visual Studio Code (Visual Studio 2022 ou tout autre IDE compatible avec .NET convient également)
  • .NET 8
  • HtmlAgilityPack (ce tutoriel utilise la version 1.6.11)

Comme nous utilisons des proxies dans ce tutoriel, vous avez besoin d’un compte DataImpulse et d’un forfait adapté à vos besoins. Nous proposons un guide pas à pas qui explique comment procéder.

Dans ce tutoriel, nous utilisons notre site web DataImpulse.com, comme exemple de scraping. Vous pouvez toutefois facilement adapter le code à vos besoins et collecter les données depuis les sources de votre choix. Bien entendu, assurez-vous toujours de respecter les conditions d’utilisation des sites web dont vous collectez les données.

Créer un client HTTP

Vous devez d’abord créer un client HTTP pour acheminer votre trafic via un serveur proxy spécifique. Il s’agit d’une application console simple qui envoie des requêtes à l’URL indiquée et récupère les réponses via un serveur proxy. Vous pouvez copier l’extrait de code ci-dessous. 


using System.Net;

class HttpClientApp
{
    public static void Main(string[] args)
    {
        DownloadPageAsync().Wait();
    }

    private static async Task DownloadPageAsync()
    {
        string page = "https://api.ipify.org/"; // Example API to get the public IP address

        // Configure proxy
        var proxy = new WebProxy("gw.dataimpulse.com:823")
        {
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential("your login", "your password")
        };

        // Set up HTTP client handler with proxy
        var httpClientHandler = new HttpClientHandler
        {
            Proxy = proxy,
            UseProxy = true
        };

        using (var client = new HttpClient(handler: httpClientHandler, disposeHandler: true))
        {
            try
            {
                // Send the HTTP GET request
                var response = await client.GetAsync(page);

                // Check if the response is successful
                response.EnsureSuccessStatusCode();

                // Get the content of the response
                string result = await response.Content.ReadAsStringAsync();
                Console.WriteLine("Response received: ");
                Console.WriteLine(result);
                Console.WriteLine("Press any key to exit.");
                Console.ReadLine(); // Keep the console open to display the result
            }
            catch (HttpRequestException e)
            {
                Console.WriteLine($"Request error: {e.Message}");
                Console.WriteLine("Press any key to exit.");
                Console.ReadLine(); // Keep the console open to display the result
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Unexpected error: {ex.Message}");
                Console.WriteLine("Press any key to exit.");
                Console.ReadLine(); // Keep the console open to display the result
            }
        }
    }
}

      
        

      

Pour exécuter cette application et les suivantes, saisissez la commande ci-dessous dans le terminal, depuis le répertoire racine de votre application.


dotnet run --project NameOfProject
      
        

      

La sortie devrait ressembler à ceci:

Implémenter la rotation des proxies

Acheminer votre trafic via un serveur proxy ne suffit pas. Pour respecter les restrictions de trafic, vous devez utiliser une nouvelle adresse IP pour chaque requête. L’étape suivante consiste donc à mettre en place une rotation des proxies afin de sélectionner une adresse IP aléatoire dans notre pool.


using System.Net;

class ProxyRotator
{
    // List of proxies to rotate through
    private static List proxies = new List
    {
        new WebProxy("http://gw.dataimpulse.com:10000"),
        new WebProxy("http://gw.dataimpulse.com:10001"),
        new WebProxy("http://gw.dataimpulse.com:10002")
    };

    public static void Main(string[] args)
    {
        MakeRequestsWithRotation().Wait();
    }

    private static async Task MakeRequestsWithRotation()
    {
        // Example URLs to request
        string url = "https://api.ipify.org/";

        for (int i = 0; i < proxies.Count; i++)
        {
            // Send request using each proxy
            Console.WriteLine($"Using proxy: {proxies[i].Address}");
            try
            {
                var response = await SendRequestWithProxy(url, proxies[i]);
                if (response.IsSuccessStatusCode)
                {
                    Console.WriteLine($"Request succeeded with proxy {proxies[i].Address}");
                    string responseBody = await response.Content.ReadAsStringAsync();
                    Console.WriteLine($"IP address from API website: {responseBody}");  // Print or process the response as needed
                }
                else
                {
                    Console.WriteLine($"Request failed with proxy {proxies[i].Address}, Status Code: {response.StatusCode}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Exception with proxy {proxies[i].Address}: {ex.Message}");
            }
        }
    }

    // Function to send request using a specific proxy
    private static async Task SendRequestWithProxy(string url, WebProxy proxy)
    {
        HttpClientHandler handler = new HttpClientHandler
        {
            Proxy = proxy,
            UseProxy = true
        };

        using (HttpClient client = new HttpClient(handler))
        {
            return await client.GetAsync(url);
        }
    }
}

      
        

      

Dans l’exemple ci-dessus, nous définissons une liste de proxies à utiliser en rotation (3 dans notre cas) et vérifions les adresses IP obtenues à l’aide de l’http://api.ipify.org/. Le résultat devrait ressembler à ceci:

Créer un outil de vérification des proxies

Pour nous assurer que les proxies fonctionnent, nous devons configurer un outil de vérification des proxies. Il envoie une requête HTTP via un serveur proxy et indique si celui-ci est valide. Nous utilisons dataimpulse.com, mais n’importe quelle autre URL convient.


using System.Net;

class ProxyChecker
{
    // Entry point renamed to avoid conflict
    public static void Main(string[] args)
    {
        string proxyAddress = "gw.dataimpulse.com"; // Replace with your proxy address
        // Replace with your proxy ports
        var proxyPortStart = 10000; 
        var proxyPortEnd = 10100;

        var tasks = new List();
        for (var proxyPort = proxyPortStart; proxyPort < proxyPortEnd; proxyPort++)
        {
            tasks.Add(CheckProxy(proxyAddress, proxyPort));
        }

        Task.WaitAll(tasks.ToArray());
    }

    public static async Task CheckProxy(string proxyAddress, int proxyPort)
    {
        var proxy = new WebProxy(proxyAddress, proxyPort)
        {
            // Uncomment and modify if the proxy requires credentials
            Credentials = new NetworkCredential("your login", "your password"),
            BypassProxyOnLocal = false
        };

        var httpClientHandler = new HttpClientHandler
        {
            Proxy = proxy,
            UseProxy = true
        };

        using (var client = new HttpClient(httpClientHandler))
        {
            try
            {
                client.Timeout = TimeSpan.FromSeconds(10); // Set a timeout
                var response = await client.GetAsync("https://api.ipify.org/"); // You can use any URL for testing
                if (response.IsSuccessStatusCode)
                {
                    Console.WriteLine("Proxy is working: " + proxyAddress + ":" + proxyPort);
                }
                else
                {
                    Console.WriteLine("Proxy is not working (Invalid response): " + proxyAddress + ":" + proxyPort);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Proxy is not working (Exception): " + proxyAddress + ":" + proxyPort + " - " + ex.Message);
            }
        }
    }
}

      
        

      

Ici, vous devez indiquer le nom d’hôte, le port et les identifiants. Vous les trouverez dans votre tableau de bord DI, dans l’onglet du forfait concerné. Vous devez également définir un délai d’attente en secondes.

Voici un exemple du résultat :

Faire du scraping de données

Le cœur de notre projet est un web scraper. Il envoie une requête HTTP et récupère le contenu HTML de la page d’accueil de DataImpulse.


using System.Net;
using HtmlAgilityPack;

class WebScraper
{
    public static void Main(string[] args)
    {
        Scrape().Wait();
    }

    private static async Task Scrape()
    {
        // Define the proxy details
        string proxyAddress = "http://gw.dataimpulse.com:823"; // Replace with your proxy address
        string proxyUsername = "your login"; // Replace with your proxy username (if needed)
        string proxyPassword = "your password"; // Replace with your proxy password (if needed)

        // Create a Proxy Handler
        var httpClientHandler = new HttpClientHandler
        {
            Proxy = new WebProxy(proxyAddress)
            {
                Credentials = new NetworkCredential(proxyUsername, proxyPassword)
            },
            UseProxy = true
        };

        // Create an HttpClient using the handler with the proxy
        using (var client = new HttpClient(httpClientHandler))
        {
            // Define the target URL to scrape
            string url = "https://dataimpulse.com/";
            var baseUri = new Uri(url);

            try
            {
                // Send GET request
                var response = await client.GetAsync(url);

                // Use the new code snippet here
                if (response.IsSuccessStatusCode)
                {
                    var content = await response.Content.ReadAsStringAsync();

                    // Load the HTML content into an HtmlDocument
                    HtmlDocument doc = new();
                    doc.LoadHtml(content);

                    // Use XPath to find all  tags that are direct children of 
  • ,

    , or var nodes = doc.DocumentNode.SelectNodes("//li/a[@href] | //p/a[@href] | //td/a[@href]"); if (nodes != null) { foreach (var node in nodes) { string hrefValue = node.GetAttributeValue("href", string.Empty); string title = node.InnerText; // This gets the text content of the tag, which is usually the title var fullUri = new Uri(baseUri, hrefValue); Console.WriteLine($"Title: {title}, Link: {fullUri.AbsoluteUri}"); // You can process each title and link as required } } else { Console.WriteLine("No matching nodes found."); } } else { Console.WriteLine($"Failed to scrape. Status code: {response.StatusCode}"); } } catch (Exception ex) { Console.WriteLine($"An error occurred: {ex.Message}"); } } } }

  • Vous pouvez toutefois adapter ce code pour récupérer les données dont vous avez besoin. 

    Pourquoi DataImpulse?

    Vous pourriez être tenté d’utiliser des proxies publics pour des projets de scraping web, car ils semblent être un excellent moyen d’économiser de l’argent. Cependant, les proxies gratuits présentent de nombreux risques, allant des connexions lentes ou instables aux fuites de données personnelles, car vous ne savez jamais qui gère ces serveurs. Si vous souhaitez connaître toutes les raisons d’éviter les proxies gratuits, consultez les articles suivants : Pourquoi vous ne devriez pas utiliser de fausses IP ni des proxies gratuits et De la faible vitesse aux menaces de sécurité: pourquoi vous devriez éviter les proxies gratuits. C’est pourquoi il est préférable de se tourner vers des fournisseurs fiables. DataImpulse propose des adresses IP obtenues légalement, qui ne sont pas associées à des activités malveillantes, ainsi que des forfaits abordables. Par exemple, vous pouvez acheter des proxies résidentiels pour $1 par 1 GB. Nous appliquons un modèle de tarification à l’usage, vous n’avez donc pas à vous soucier de l’expiration de votre trafic. Cliquez sur le bouton “Essayez maintenant” dans le coin supérieur droit de l’écran, ou écrivez-nous à [email protected]

    Share article: