Retour au blog
Guides
Suciu Dan13 avril 20238 min de lecture

Contournez les restrictions et récupérez efficacement des données grâce aux proxys et à HttpClient en C#

Contournez les restrictions et récupérez efficacement des données grâce aux proxys et à HttpClient en C#

Que sont les proxys ?

Les proxys, également appelés serveurs proxy, agissent comme des intermédiaires entre un client (tel qu'un navigateur web ou un scraper) et un serveur cible (tel qu'un site web). Le client envoie une requête au proxy, qui la transmet ensuite au serveur cible.

Une fois que le serveur cible a répondu, le proxy renvoie la réponse au client. En matière de web scraping, l'utilisation de proxys permet de masquer l'adresse IP du scraper, empêchant ainsi le site web de détecter et de bloquer la requête.

L'utilisation de plusieurs proxys peut également aider à éviter la détection et le blocage. Certains fournisseurs de proxys proposent même la possibilité de faire tourner les adresses IP, offrant ainsi une protection supplémentaire contre le blocage de vos requêtes.

Création d'un projet C#

Cet article utilise Visual Studio 2022 pour Windows et .Net 6.0. Pour suivre les étapes, ouvrez Visual

Visual Studio 'Create a new project' dialog filtered to C# templates

Dans Visual Studio, sélectionnez C# dans le menu déroulant « All Languages ». Si le modèle « Console App » n'est pas visible, utilisez le champ « Search for templates » pour le localiser. Cliquez ensuite sur « Next ».

Choisissez l'emplacement de votre projet sur l'écran suivant. Cliquez ensuite sur Suivant pour passer à l'écran Informations supplémentaires. Assurez-vous que .NET 7.0 est sélectionné avant de cliquer sur Créer.

Visual Studio 'Configure your new project' dialog showing project name and location fields for a C# console app

Une fois le projet créé, le code Hello World s'affichera à l'écran :

// See https://aka.ms/new-console-template for more information

Console.WriteLine("Hello, World!");

Effectuer une requête HTTP

Effectuons notre première requête avec `HttpClient`. Remplacez le code factice par celui-ci :

using var client = new HttpClient();

var result = await client.GetStringAsync("https://api.ipify.org?format=json");

Console.WriteLine(result); 

Ce code utilise la classe HttpClient de l'espace de noms System.Net.Http pour effectuer une requête HTTP GET vers le point de terminaison https://api.ipify.org/ et récupérer la réponse sous forme de chaîne.

Voici une analyse détaillée du code :

  • `using var client = new HttpClient();` : cette ligne crée une nouvelle instance de la classe `HttpClient` et l'assigne à la variable client. L'instruction `using` garantit la suppression correcte de l'objet client une fois qu'il n'est plus nécessaire.
  • `var result = await client.GetStringAsync("https://api.ipify.org/");` : cette ligne utilise la méthode `GetStringAsync()` de l'objet client pour envoyer une requête GET vers le point de terminaison https://api.ipify.org/. Cette méthode lit la réponse sous forme de chaîne de caractères et la stocke dans la variable `result`. Le mot-clé `await` rend la requête asynchrone, ce qui permet au programme de continuer à exécuter d'autres instructions pendant le traitement de la requête.
  • `Console.WriteLine(result);` : cette ligne affiche le contenu de la variable `result` dans la console, qui correspond à la réponse de la requête GET.

Enregistrez le code et exécutez-le. Vous verrez votre adresse IP s'afficher dans le terminal.

Utilisation de proxys avec HttpClient

Avant de reprendre le codage, rendez-vous sur le site Web Free Proxy List et sélectionnez un proxy situé le plus près possible de votre emplacement. Pour cet exemple, je vais sélectionner un proxy situé en Allemagne. Notez l'adresse IP et le port du proxy sélectionné.

Pour utiliser un proxy avec HttpClient, nous devons créer une instance HttpClientHandler. Au sein de cette instance, nous définissons deux propriétés : l'URL du proxy et le port, ainsi que `ServerCertificateCustomValidationCallback`. C'est un nom de variable assez long, mais c'est important.

`ServerCertificateCustomValidationCallback` indique à HttpClientHandler d'ignorer toute erreur de certificat HTTPS. Vous vous demandez peut-être pourquoi il faut procéder ainsi.

Le serveur proxy intercepte et inspecte le trafic, y compris le certificat HTTPS, avant de le transférer vers le serveur cible. Par conséquent, le certificat présenté par le serveur cible au serveur proxy peut être différent de celui présenté au client.

Par défaut, HttpClient et d’autres bibliothèques similaires valideront le certificat présenté par le serveur cible, et s’il n’est pas valide ou ne correspond pas à celui présenté au client, elles lèveront une exception. C’est de là que proviennent les erreurs de certificat.

Ignorer les erreurs de certificat HTTPS lors de l'utilisation du mode proxy permet à la requête de se poursuivre même si le certificat n'est pas valide, ce qui est utile dans certains cas où le certificat est intercepté et modifié par le serveur proxy.

Il est temps d'écrire le code. Commençons par l'instance HttpClientHandler :

using System.Net;

using var httpClientHandler = new HttpClientHandler

{

	Proxy = new WebProxy("http://5.9.139.204:24000"),

	ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator

};

Nous devons fournir à la classe HttpClient une instance de HttpClientHandler. Le code client modifié devrait se présenter comme suit :

using var client = new HttpClient(httpClientHandler);

Le code complet devrait ressembler à ceci :

using System.Net;

using var httpClientHandler = new HttpClientHandler

{

	Proxy = new WebProxy("http://5.9.139.204:24000"),

	ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator

};

using var client = new HttpClient(httpClientHandler);

var result = await client.GetStringAsync("https://api.ipify.org?format=json");

Console.WriteLine(result);

L'exécution du code renverra l'adresse IP du proxy à la place de votre adresse IP. Vous pouvez ouvrir l'URL ipify dans votre navigateur et comparer les résultats.

Passons à l'authentification

Lorsque vous vous inscrivez à un service de proxy premium, vous recevez un nom d'utilisateur et un mot de passe à utiliser dans votre application pour l'authentification.

Il est temps de remplacer la définition WebProxy par celle-ci :

Proxy = new WebProxy

{

    	Address = new Uri($"http://5.9.139.204:24000"),

    	Credentials = new NetworkCredential(

        	userName: "PROXY_USERNAME",

        	password: "PROXY_PASSWORD"

    	)

},

En remplaçant les identifiants par défaut, en mettant à jour l'URL du proxy et en exécutant le code, vous verrez que l'adresse IP affichée est différente de celle utilisée par votre ordinateur. Essayez-le !

Rotation des proxys

La rotation des proxys est utile car elle permet d'éviter la détection et empêche les sites web de bloquer votre adresse IP. Les sites web peuvent surveiller et bloquer les adresses IP qui effectuent un nombre excessif de requêtes en peu de temps ou celles associées à des activités de scraping.

Nous pouvons utiliser le site Web Free Proxy List pour générer une liste de proxys que nous pouvons faire tourner à chaque requête envoyée. En mettant en œuvre cette technique, chaque requête aura une adresse IP distincte, ce qui rendra le site Web cible moins suspect.

Veuillez noter que la liste de proxys que vous trouverez sur le site web peut différer de celle que j'ai compilée. J'ai sélectionné cinq proxys et les ai définis dans une liste comme suit :

List<string> proxiesList = new List<string> {

	"http://65.108.230.238:45977",

	"http://163.116.177.46:808",

	"http://163.116.177.31:808",

	"http://20.111.54.16:80",

	"http://185.198.61.146:3128"

};

Choisissons un index aléatoire dans cette liste et utilisons l'élément de cet index sélectionné avec la classe Uri :

var random = new Random();

int index = random.Next(proxiesList.Count);

Il ne nous reste plus qu'à combiner tous ces éléments. La version finale de votre code de scraper devrait se présenter comme suit :

using System.Net;

List<string> proxiesList = new List<string> {

	"http://65.108.230.238:45977",

	"http://163.116.177.46:808",

	"http://163.116.177.31:808",

	"http://20.111.54.16:80",

	"http://185.198.61.146:3128"

};

var random = new Random();

int index = random.Next(proxiesList.Count);

using var httpClientHandler = new HttpClientHandler

{

	Proxy = new WebProxy(proxiesList[index]),

	ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator

};

using var client = new HttpClient(httpClientHandler);

var result = await client.GetStringAsync("https://api.ipify.org?format=json");

Console.WriteLine(result);

Utilisation des proxys WebScrapingAPI

Opter pour des proxys premium provenant d'un service comme WebScrapingAPI est un meilleur choix que d'utiliser des proxys gratuits, car ils sont plus fiables, plus rapides et offrent une sécurité renforcée. Les proxys premium sont moins susceptibles d'être bloqués par les sites web et ont un temps de réponse plus court.

En comparaison, les proxys gratuits peuvent être lents, peu fiables, contenir des logiciels malveillants et sont plus susceptibles d'avoir un taux d'échec élevé, car le site cible bloquera vos requêtes.

Vous souhaitez essayer WebScrapingAPI ? Pas de problème, inscrivez-vous simplement à notre essai gratuit de 14 jours. Vous pouvez utiliser les 5 000 crédits pour tester toutes les fonctionnalités disponibles.

Une fois que vous avez un compte, rendez-vous sur l'API Playground et sélectionnez l'onglet « Proxy Mode » dans la section « Code Samples ».

WebScrapingAPI code samples panel showing a curl proxy request example with a Copy button

Nous allons maintenant utiliser l'URL proxy générée dans l'onglet « Proxy Mode » avec notre implémentation C#.

Mettez à jour l'URL du proxy et les informations d'identification dans httpClientHandler pour qu'elles ressemblent à ceci :

using var httpClientHandler = new HttpClientHandler

{

	Proxy = new WebProxy

	{

    	Address = new Uri($"http://proxy.webscrapingapi.com:80"),

    	Credentials = new NetworkCredential(

        	userName: "webscrapingapi.render_js=0.device=desktop.proxy_type=datacenter",

        	password: "YOUR_API_KEY"

    	)

	},

	ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator

};

Vous pouvez utiliser la propriété username pour activer ou désactiver des fonctionnalités spécifiques de l'API. N'oubliez pas de définir également votre clé API dans la propriété password. Vous pouvez consulter la documentation complète ici.

Chaque fois que vous exécuterez ce code, vous recevrez une adresse IP différente, car WebScrapingAPI fait tourner les adresses IP à chaque requête. Vous pouvez en savoir plus sur cette fonctionnalité en consultant la documentation sur le mode proxy.

Vous avez également la possibilité de basculer entre les proxys de centre de données et les proxys résidentiels. Vous trouverez plus de détails à ce sujet dans la section Proxys de notre documentation.

Conclusion

L'utilisation d'un proxy est un aspect essentiel du web scraping, car elle vous permet de masquer votre adresse IP et d'accéder à des sites web restreints. La bibliothèque HttpClient de C# est un outil puissant pour l'extraction de données, et lorsqu'elle est combinée à un proxy fiable, vous pouvez obtenir une extraction de données efficace et rapide.

En vous abonnant à un service de proxy premium tel que WebScrapingAPI, vous aurez accès à un large éventail de fonctionnalités, notamment la rotation d'adresses IP et la possibilité de basculer entre des proxys de centre de données et des proxys résidentiels.

Nous espérons que cet article vous a permis de mieux comprendre l'utilisation d'un proxy avec HttpClient et comment cela peut répondre à vos besoins en matière de scraping. N'hésitez pas à vous inscrire à notre essai gratuit de 14 jours pour tester notre service et découvrir toutes ses fonctionnalités.

À propos de l'auteur
Suciu Dan, cofondateur @ WebScrapingAPI
Suciu Dancofondateur

Suciu Dan est le cofondateur de WebScrapingAPI et rédige des guides pratiques destinés aux développeurs sur le web scraping avec Python et Ruby, ainsi que sur les infrastructures de proxy.

Commencez à créer

Prêt à faire évoluer votre système de collecte de données ?

Rejoignez plus de 2 000 entreprises qui utilisent WebScrapingAPI pour extraire des données Web à l'échelle de l'entreprise, sans aucun coût d'infrastructure.