
Apprenez à utiliser PHP pour capturer des données sans bloquer l'IP !
Les confrères engagés dans la collecte de données savent que le plus grand casse-tête est que le site cible vous donne soudainement une interdiction d'IP. Le mois dernier, j'ai aidé des clients à attraper le prix d'une plateforme de commerce électronique, il a suffi de deux jours pour recevoir un avertissement 403.IP proxyIl s'agit là d'un véritable fléau.
Préparation de l'équipement de base
Tout d'abord, l'ensemble de l'environnement PHP peut être utilisé pour confirmer que l'extension curl est installée. Il y a ici un écueil à noter : certains serveurs n'ouvrent pas le curl par défaut, il faut aller dans le php.ini pour enlever l'extension=curl devant le point-virgule.
if (!function_exists('curl_init')) {
die('Allez activer l'extension curl !) ;
}
Code de capture nue
Voyons d'abord à quoi ressemble un code non protégé :
$url = 'https://target-site.com/data' ;
$ch = curl_init() ;
curl_setopt($ch, CURLOPT_URL, $url) ;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ;
$result = curl_exec($ch) ;
curl_close($ch) ;
Il ne s'agit pas d'une demi-heure de quasi-blocage, surtout lorsque la fréquence de collecte est élevée. La semaine dernière, un ami qui utilise cette méthode d'écriture a changé pendant une demi-heure l'adresse IP de six serveurs et s'est mis en colère en laissant tomber directement le clavier.
Mettez un gilet pare-balles sur votre code.
C'est là que le bât blesse ! Pour connecter le proxy d'ipipgo à curl, le code doit être modifié pour ressembler à ceci :
$proxy = 'proxy.ipipgo.com:9021' ; // indiquez ici le canal fourni par ipipgo
$auth = 'username:password' ; // informations d'authentification générées dans le backend
$ch = curl_init() ;
curl_setopt($ch, CURLOPT_URL, $targetUrl) ;
curl_setopt($ch, CURLOPT_PROXY, $proxy) ; curl_setopt($ch, CURLOPT_PROXY, $proxy) ;
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $auth) ; curl_setopt($ch, CURLOPT_PROXYUSERPWD, $auth)
curl_setopt($ch, CURLOPT_TIMEOUT, 15) ; curl_setopt($ch, CURLOPT_TIMEOUT, 15) ;
//... Laissez le reste des paramètres tels quels
Il convient de noter trois points essentiels :
1. l'adresse du proxy avec le numéro de port, à ne pas manquer
2) L'information d'authentification n'est pas un compte de site web, elle est unique au backend d'ipipgo.
3) Le délai d'attente doit être court, 15 secondes suffisent dans la plupart des cas.
Guide pratique pour éviter la fosse
Situation réelle à laquelle j'ai été confronté récemment en aidant un client à effectuer un déploiement :
| symptomatique | guérir |
|---|---|
| Retour à la page blanche | Vérifier l'adresse du proxy pour les en-têtes de protocole (http/https) |
| Temps morts fréquents | Changement de zone de ligne dans la console ipipgo |
| Vitesse instable | Activer la commutation automatique d'IP, régler l'intervalle sur 30 secondes. |
Package d'expérience de conduite pour les vétérans
1. la collecte de grandes quantités de temps, il est recommandé d'utiliser l'agent résidentiel dynamique d'ipipgo, personnellement testé avec une moyenne quotidienne de 100 000 demandes qui ne tournent pas !
2. ne pas utiliser d'agents libres pour des projets importants, la dernière fois que quelqu'un a été avide de bon marché, le résultat est que la collection est pleine de codes publicitaires.
3) Définir User-Agent pour déguiser le navigateur, mais ne pas utiliser trop populaire, facile à détecter.
Foire aux questions QA
Q : Que dois-je faire si mon IP proxy tombe soudainement en panne ?
A:Enable "Failover" en arrière-plan d'ipipgo, le système basculera vers une nouvelle IP en quelques secondes.
Q : Comment puis-je savoir si une procuration est en vigueur ?
A : Ajoutez curl_getinfo($ch, CURLINFO_PRIMARY_IP) au code pour afficher les adresses IP d'exportation réelles.
Q : Comment gérer un nombre élevé d'acquisitions simultanées ?
R : Utilisez l'API d'ipipgo pour obtenir dynamiquement le pool de proxy, assignez des IP indépendantes à chaque thread et n'oubliez pas de contrôler la fréquence des requêtes.
Enfin, je voudrais donner une leçon de larmes : je n'ai pas vérifié la disponibilité du proxy à une certaine heure, ce qui a conduit à la collecte de toutes les données erronées. Plus tard, j'ai découvert qu'ipipgo fournissait des outils de test en ligne, et maintenant je lance un script de test avant chaque démarrage, ce qui m'évite bien des ennuis.

