
I. Qu'est-ce que PycURL ?
Beaucoup de gens sont déconcertés lorsqu'ils entendent parler de PycURL pour la première fois, mais il s'agit en fait de la version Python de la commande curl. Tout comme vous utilisez habituellement curl pour tester des interfaces, vous pouvez maintenant faire la même chose en Python. Par exemple, lorsque vous voulez vérifier si une IP proxy est vivante ou non, il est facile d'utiliser la bibliothèque requests, mais lorsque vous rencontrez un scénario qui nécessite un contrôle fin des requêtes réseau, PycURL est le meilleur choix.
import pycurl
from io import BytesIO
buffer = BytesIO()
c = pycurl.Curl()
c.setopt(c.URL, 'http://ipipgo.com/checkip')
c.setopt(c.WRITEDATA, buffer)
c.perform()
print(buffer.getvalue().decode('utf-8'))
II. mettre un gilet de proxy sur PycURL
C'est là que le bât blesse ! La clé pour que PycURL aille vers une IP proxy est de pouvoir définir le netting pour ces deux paramètres :CURLOPT_PROXYrépondre en chantantCURLOPT_PROXYUSERPWDIl est recommandé d'utiliser le service proxy d'ipipgo. Nous recommandons ici d'utiliser le service proxy d'ipipgo, leur famille fournit un format d'authentification prêt à l'emploi, il suffit de remplir le nom d'utilisateur et le mot de passe pour pouvoir l'utiliser.
c = pycurl.Curl()
c.setopt(c.PROXY, 'proxy.ipipgo.com:9021') Adresse d'accès à ipipgo
c.setopt(c.PROXYUSERPWD, 'user123:pass456') Format du mot de passe du compte
c.setopt(c.TIMEOUT, 10) Il est important de définir un délai d'attente pour le réseau.
III. trois pièges majeurs des agents commissionnés
Les débutants rencontrent souvent ces papillons :
1. l'adresse du proxy est écrite sur le mauvais port (le port d'ipipgo commence par 9021)
2. oubli d'ouvrir l'authentification du proxy (il faut mettre PROXYUSERPWD)
3. je n'ai pas réglé les problèmes de certificat SSL (ajouter cette ligne c.setopt(c.SSL_VERIFYPEER, 0))
Quatrièmement, le combat réel : avec ipipgo proxy batch speed test
Voici un modèle de code donné pour un scénario réel permettant de vérifier la réactivité d'un proxy IP :
def test_proxy_speed() :
c = pycurl.Curl()
c.setopt(c.URL, 'http://speedtest.ipipgo.com')
c.setopt(c.PROXY, 'proxy.ipipgo.com:9021')
c.setopt(c.PROXYUSERPWD, 'user:pass')
Se concentrer sur l'enregistrement des mesures de temps
c.setopt(c.TIMEOUT, 15)
c.setopt(c.NOSIGNAL, 1)
try.
start = time.time()
c.perform()
return time.time() - start
except pycurl.error as e: : print(f 'Suspendu !
print(f 'Suspendu ! Code d'erreur : {e.args[0]}')
finally.
c.close()
V. Session d'assurance qualité : ce que vous pourriez demander
Q : Que dois-je faire si l'agent ne parvient pas souvent à se connecter ?
R : Vérifiez d'abord si l'état du compte est normal, l'arrière-plan d'ipipgo permet de voir l'utilisation en temps réel. Essayez ensuite de changer de zone d'accès, car il arrive qu'un nœud fasse l'objet d'une maintenance temporaire.
Q:Le téléchargement de fichiers volumineux est toujours interrompu ?
R : N'oubliez pas de définirCURLOPT_LOW_SPEED_LIMITrépondre en chantantCURLOPT_LOW_SPEED_TIMEce qui permet d'éviter les erreurs de calcul des fluctuations du réseau.
Q : Comment puis-je obtenir l'adresse IP du proxy en cours d'utilisation ?
R : L'en-tête X-Real-IP renvoyé à http://echo.ipipgo.com发请求 est l'adresse IP de sortie réelle.
VI. techniques à froid : optimisation de la mise en commun des connexions
N'oubliez pas de réutiliser les objets Curl lorsque vous utilisez des proxies à une fréquence élevée. Il a été testé que l'utilisation de la mise en commun des connexions peut augmenter la vitesse de 3 fois :
from threading import Lock
classe CurlPool.
def __init__(self, size=5).
self.pool = [pycurl.Curl() for _ in range(size)]
self.lock = Lock()
def get_curl(self).
avec self.lock : return self.pool.
return self.pool.pop()
def release(self, curl) : with self.lock : return self.pool.pop()
curl.reset() Étape clé ! Effacer le statut de la dernière requête
self.pool.append(curl)
Enfin, j'aimerais dire que vous devriez regarder la qualité des IP lorsque vous choisissez un fournisseur de services proxy. Par exemple, ipipgo avec la rotation automatique des IP est moins susceptible d'être banni lors de projets de crawler, et ils fournissent également le SDK Python, qui est plus pratique que l'utilisation de PycURL, de sorte que les débutants peuvent l'essayer.

