Curl est un outil de demande HTTP commun, qui est généralement utilisé pour envoyer des demandes de Get, de publication, etc. en php. Lorsque plusieurs demandes doivent être faites simultanément, plusieurs sessions Curl peuvent être créées, chacune utilisant des ressources système indépendamment. La fonction curl_share_init offre la possibilité de partager des ressources pour plusieurs sessions Curl. En partageant certaines ressources (telles que les cookies, les connexions, les recherches DNS, etc.), différentes sessions de boucle peuvent réduire le nombre de fois que de nouvelles connexions sont créées fréquemment, évitant ainsi le blocage IP.
Utilisez CURL_SHARE_INIT pour initialiser une ressource partagée et définir des options partagées. Par exemple, nous pouvons partager des cookies ou des informations DNS.
$share = curl_share_init();
curl_share_setopt($share, CURLSHOPT_SHARE, CURLSHARE_COOKIE); // commun cookies
curl_share_setopt($share, CURLSHOPT_SHARE, CURLSHARE_DNS); // commun DNS information
Ensuite, créez plusieurs sessions Curl et liez-les à la ressource partagée afin qu'ils puissent partager la même connexion et d'autres paramètres.
$ch1 = curl_init("http://m66.net/path/to/resource1");
$ch2 = curl_init("http://m66.net/path/to/resource2");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_SHARE, $share);
curl_setopt($ch2, CURLOPT_SHARE, $share);
Lorsque plusieurs demandes sont effectuées, ils partagent les mêmes ressources, ce qui réduit le risque de blocage causé par la création fréquente de nouvelles connexions.
$response1 = curl_exec($ch1);
$response2 = curl_exec($ch2);
Une fois la demande terminée, fermez la session Curl et les ressources partagées.
curl_close($ch1);
curl_close($ch2);
curl_share_close($share);
Le principe central de partage des ressources en boucle est d'éviter les blocages causés par des demandes fréquentes en réduisant la création de nouvelles connexions TCP. Chaque session Curl créera indépendamment une nouvelle connexion TCP par défaut. Si vous faites plusieurs demandes au même serveur cible, la création de connexions fréquente peut être détectée et le mécanisme de blocage est déclenché.
Après avoir utilisé CURL_SHARE_INIT , plusieurs sessions Curl partagent la même ressource de connexion, ce qui réduit efficacement le nombre de connexions et les demandes de requête DNS en double. Moins de connexion et de consommation de ressources rendent votre comportement de demande plus "normal", réduisant ainsi le risque de blocage IP.
Bien que le partage des ressources en boucle puisse aider à éviter les blocages fréquents, ils ne sont pas une solution universelle. Voici quelques choses à noter:
Contrôle de fréquence de demande : le partage des ressources en boucle n'évite pas complètement le blocage IP. Si la fréquence de demande est trop élevée, le serveur peut toujours déclencher le mécanisme de blocage. Il est recommandé de contrôler raisonnablement la fréquence de demande, d'utiliser le mécanisme de retard ou de randomiser le temps de demande.
En utilisant la proxy IP : lorsque les demandes sont trop fréquentes, il est recommandé de combiner la propriété proxy pour partager la pression de demande pour éviter une utilisation excessive d'une seule IP.
Politique de réponse du serveur : certains serveurs peuvent juger le comportement d'exception demandé en fonction d'autres paramètres (tels que l'utilisateur-agent ou le référence). Discuivant raisonnablement les informations de l'en-tête de demande et la simulation d'accès normal des utilisateurs est également un moyen efficace pour empêcher IP d'être bloqué.
L'utilisation de la fonction curl_share_init peut éviter le problème du blocage IP dans une certaine mesure, et convient particulièrement aux scénarios où un grand nombre des mêmes demandes sont nécessaires. En partageant des ressources en boucle, nous pouvons réduire efficacement la création en double et la recherche DNS des connexions, en réduisant le risque d'être bloqué. Cependant, se fier uniquement aux ressources partagées ne suffit pas pour éviter complètement les blocages. Le contrôle raisonnable de la fréquence des demandes et combinés avec d'autres moyens de protection (tels que la PI proxy) peuvent encore améliorer le taux de stabilité et de réussite des demandes. Dans les applications pratiques, les développeurs doivent considérer une variété de stratégies de protection basées sur des scénarios spécifiques.