Contourner les restrictions et récupérer les données efficacement avec les proxies et le HttpClient C#
Suciu Dan le 13 avril 2023

Le web scraping est un outil puissant qui vous permet d'extraire des données précieuses de sites web à des fins diverses. Cependant, de nombreux sites web bloquent les tentatives de scraping afin de protéger leurs données. L'un des moyens de contourner ces blocages consiste à utiliser un serveur proxy.
Dans cet article, nous allons voir comment utiliser un proxy avec C# HttpClient, une bibliothèque populaire pour effectuer des requêtes HTTP en C#. Nous aborderons les conditions préalables, la configuration et les astuces de débogage et de dépannage.
En outre, nous verrons comment envoyer une requête et améliorer les performances des requêtes. À la fin de cet article, vous aurez une bonne compréhension de l'utilisation d'un proxy avec C# HttpClient et de la manière dont il peut bénéficier à vos efforts de scraping web.
Qu'est-ce qu'une procuration ?
Les mandataires, également appelés serveurs mandataires, servent d'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 répond, le proxy renvoie la réponse au client. Dans le cadre du 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 proxy offrent même la possibilité d'effectuer une rotation des IP, ce qui constitue 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 cet article, ouvrez Visual

Dans Visual Studio, sélectionnez C# dans la liste déroulante Tous les langages. Si le modèle Console App n'est pas visible, utilisez l'entrée Search for templates pour le localiser. Cliquez ensuite sur Suivant.
Choisissez l'emplacement de votre projet dans l'écran suivant. Cliquez ensuite sur Suivant pour passer à l'écran Informations complémentaires. Assurez-vous que vous avez sélectionné .NET 7.0 avant de cliquer sur Créer.

Après la création du projet, vous verrez le code Hello World à l'écran :
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
Effectuer une requête HTTP
Faisons notre première requête avec `HttpClient`. Remplaçons le code fictif 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 la forme d'une chaîne.
Voici la décomposition du code :
- `utilisant var client = new HttpClient();` : Cette ligne crée une nouvelle instance de la classe `HttpClient` et l'assigne à la variable client. L'instruction `using` assure l'élimination 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 au 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 codes pendant le traitement de la requête.
- `Console.WriteLine(result);` : Cette ligne écrit le contenu de la variable result dans la console, qui est la réponse à la requête GET.
Enregistrez le code et exécutez-le. Vous verrez votre adresse IP dans le terminal.
Utilisation de proxy avec HttpClient
Avant de commencer à coder, visitez le site Web Free Proxy List et sélectionnez le proxy le plus proche de chez vous. Pour cet exemple, je choisirai 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 de HttpClientHandler. Dans cette instance, nous définissons deux propriétés : l'URL du proxy, le port et `ServerCertificateCustomValidationCallback`. C'est un nom un peu long pour une variable, mais c'est important.
`ServerCertificateCustomValidationCallback` indique au HttpClientHandler d'ignorer toute erreur de certificat HTTPS. Vous vous demandez peut-être pourquoi vous devez faire cela.
Le serveur proxy intercepte et inspecte le trafic, y compris le certificat HTTPS, avant de le transmettre au serveur cible. Par conséquent, le certificat présenté par le serveur cible au serveur mandataire peut être différent de celui présenté au client.
Par défaut, le HttpClient et d'autres bibliothèques similaires valident le certificat présenté par le serveur cible, et s'il n'est pas valide ou ne correspond pas à celui présenté au client, il lève 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 de poursuivre la requête 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) ;
L'ensemble du code 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 au lieu de votre adresse IP. Vous pouvez ouvrir l'URL ipify dans votre navigateur et comparer les résultats.
Faisons l'authentification
Lorsque vous vous inscrivez à un service 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 de 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 informations d'identification, en mettant à jour l'URL du proxy et en exécutant le code, vous verrez que l'adresse IP imprimée est différente de celle utilisée par votre ordinateur. Essayez donc !
Procurations tournantes
La rotation des proxys est bénéfique 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 dans un court laps de temps ou qui sont liées à des activités de "scraping".
Nous pouvons utiliser le site 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 des mandataires que vous trouverez sur le site web peut différer de la liste que j'ai compilée. J'ai choisi cinq mandataires et je 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) ;
Ce qu'il faut faire maintenant, c'est combiner tous les éléments. La version finale du code de votre scraper devrait ressembler à ce qui 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 proxies WebScrapingAPI
Opter pour des proxys premium 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é accrue. Les proxies premium sont moins susceptibles d'être bloqués par des 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é parce que le site cible bloquera vos requêtes.
Vous souhaitez essayer WebScrapingAPI ? Pas de problème, il vous suffit de vous inscrire à 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, allez sur le terrain de jeu de l'API et choisissez l'onglet Mode Proxy dans la section Échantillons de code.

Nous allons maintenant utiliser l'URL Proxy générée dans l'onglet Mode Proxy avec notre implémentation C#.
Mettez à jour l'URL du proxy et les informations d'identification dans le 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 effectue une rotation des IP à chaque demande. Vous pouvez en savoir plus sur cette fonctionnalité en lisant la documentation sur le mode proxy.
Vous avez également la possibilité de passer d'un proxy de centre de données à un proxy résidentiel. Vous trouverez plus de détails à ce sujet dans la section Proxies de notre documentation.
Conclusion
L'utilisation d'un proxy est un aspect essentiel du web scraping, car il vous permet de dissimuler 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 comme WebScrapingAPI, vous aurez accès à un large éventail de fonctionnalités, notamment la rotation d'IP et la possibilité de passer d'un proxy de centre de données à un proxy résidentiel.
Nous espérons que cet article vous a permis de mieux comprendre l'utilisation d'un proxy avec HttpClient et la manière dont il 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 explorer toutes ses caractéristiques et fonctionnalités.
Nouvelles et mises à jour
Restez au courant des derniers guides et nouvelles sur le web scraping en vous inscrivant à notre lettre d'information.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Articles connexes

Apprenez à récupérer des sites web dynamiques en JavaScript à l'aide de Scrapy et de Splash. De l'installation à l'écriture d'un spider, en passant par la gestion de la pagination et des réponses Splash, ce guide complet propose des instructions pas à pas pour les débutants comme pour les experts.


Les sélecteurs XPath sont-ils meilleurs que les sélecteurs CSS pour le web scraping ? Découvrez les points forts et les limites de chaque méthode et faites le bon choix pour votre projet !


Apprenez à utiliser les proxys avec Axios et Node.js pour un web scraping efficace. Conseils, exemples de code et avantages de l'utilisation de WebScrapingAPI inclus.
