
I. Qu'est-ce que PycURL ?
Il existe de nombreuses bibliothèques python pour les requêtes réseau, pourquoi devriez-vous utiliser pycurl, qui est en fait une liaison python pour la commande curl, et qui est plus rapide que la bibliothèque requests. En particulier si vous devez gérer des transferts de fichiers volumineux ou des scénarios à forte concurrence, son utilisation peut permettre d'économiser beaucoup de ressources serveur.
Nous faisons de la collecte de données frères comprennent que l'utilisation de proxy ip est juste nécessaire. Par exemple, avec le service proxy d'ipipgo, avec pycurl cette arme magique, on peut facilement contourner le mécanisme anti-escalade. Le code suivant est l'utilisation la plus basique :
import pycurl
from io import BytesIO
buffer = BytesIO()
c = pycurl.Curl()
c.setopt(c.URL, 'http://example.com')
c.setopt(c.WRITEDATA, buffer)
c.perform()
c.close()
Deuxièmement, les bibliothèques installées sont des fosses qu'il faut éviter de parcourir à pied.
L'installation de pycurl n'est paspip installC'est fait. Beaucoup de débutants sont bloqués à cette étape, et les messages d'erreur peuvent être déroutants. Voici un conseil : installez d'abord la bibliothèque de développement libcurl, puis installez pycurl. Les commandes diffèrent d'un système à l'autre, c'est pourquoi je vais établir un tableau pour vous :
| systèmes | Commandes d'installation |
|---|---|
| Ubuntu | sudo apt-get install libcurl4-openssl-dev |
| CentOS | sudo yum install libcurl-devel |
| MacOS | brew install curl-openssl |
Installez la dépendance et exécutez-la à nouveaupip install pycurln'oubliez pas d'ajouter des paramètres de compilation :PYCURL_SSL_LIBRARY=openssl pip install pycurlqui évite les pièges de la validation des certificats SSL.
Troisièmement, la bonne façon d'ouvrir l'IP proxy
C'est là que le bât blesse ! En utilisant le service proxy d'ipipgo, la mise en place d'un proxy dans pycurl est en fait assez simple. La clé est de comprendre ces paramètres :
c = pycurl.Curl()
c.setopt(pycurl.PROXY, 'proxy.ipipgo.com:9021') remplit ici l'adresse fournie par ipipgo
c.setopt(pycurl.PROXYUSERPWD, 'username:password') informations d'authentification du compte
c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_HTTP) Ajuster en fonction du type de proxy
Il y a un endroit facile pour se retourner...réglage du délai d'attente. Il est recommandé de procéder ainsi :
- Délai de connexion :
c.setopt(pycurl.CONNECTTIMEOUT, 30) - Délai d'attente de la demande :
c.setopt(pycurl.TIMEOUT, 120)
Quatrièmement, le cas réel de combat : l'acquisition automatique de la propriété intellectuelle
Combiné à l'API d'ipipgo pour la commutation automatique de proxy, il s'agit d'une véritable affaire. Par exemple, pour faire défiler 10 pages à collecter :
import json
from ipipgo_client import get_proxy En supposant qu'il s'agit du SDK pour ipipgo
for page in range(10) : proxy = get_proxy(type='http')
proxy = get_proxy(type='http') obtient un nouveau proxy à chaque fois
c = pycurl.Curl()
c.setopt(pycurl.PROXY, f"{proxy['ip']}:{proxy['port']}")
Autres configurations de requête...
essayer.
c.perform()
except pycurl.error as e.
print(f "La {page}ème requête a échoué : {e}")
V. Trois axes d'optimisation des performances
1. multiplexage des connexions: Ne soyez pas stupide et ne créez pas une nouvelle connexion à chaque fois, utilisez la fonctionc.setopt(pycurl.FORBID_REUSE, False)Activation de la mise en commun des connexions
2. Mise en cache DNS: plusc.setopt(pycurl.DNS_CACHE_TIMEOUT, 300)Il permet d'économiser beaucoup de temps de recherche
3. transmission comprimée: Réglagesc.setopt(pycurl.ACCEPT_ENCODING, 'gzip')Réduction de la consommation de trafic
Questions fréquemment posées sur l'AQ Déminage
Q : Que dois-je faire si je ne parviens pas à me connecter à l'adresse IP du proxy en permanence ?
R : Vérifiez d'abord les paramètres de la liste blanche, l'arrière-plan d'ipipgo a une fonction d'autorisation d'IP, n'oubliez pas d'ajouter l'IP du serveur. Si cela ne fonctionne pas, contactez le service clientèle pour obtenir un nœud de test.
Q : Une requête HTTPS signale une erreur de certificat ?
A : Ajouter ces deux phrases :
c.setopt(pycurl.SSL_VERIFYPEER, 0)
c.setopt(pycurl.SSL_VERIFYHOST, 0)
Bien entendu, cette méthode n'est pas recommandée pour les environnements formels et le chemin d'accès au certificat de l'autorité de certification doit être configuré correctement.
Q : Comment puis-je savoir si une procuration est en vigueur ?
R : Dans le code, ajoutez unc.setopt(pycurl.VERBOSE, True)Regardez le message CONNECT dans le journal de sortie.
Sixièmement, les compétences en matière de froid à distribuer
1. utiliserc.setopt(pycurl.HTTPHEADER, ['X-Real-IP : 1.1.1.1'])Faux IP source, fonctionne mieux avec le proxy de tunneling d'ipipgo
2. n'oubliez pas de définir vos paramètres lors du téléchargement des fichiersc.setopt(pycurl.UPLOAD, 1)collocationc.setopt(pycurl.READDATA, open('file.zip','rb'))
3. débogage des artefacts :c.setopt(pycurl.WRITEFUNCTION, lambda x : None)Rejeter directement la réponse, ce qui est utile pour tester la connectivité d'un proxy.
Enfin, à titre anecdotique, ipipgo a récemment publié unforfait de facturation basé sur la quantitéLes nouveaux utilisateurs envoient un flux 5G, suffisamment pour que vous puissiez le lancer pendant un bon moment. Les nouveaux utilisateurs envoient un flux 5G, suffisant pour que vous puissiez lancer un bon moment. Les problèmes techniques sont directement transmis aux ingénieurs, le taux de réponse est beaucoup plus rapide que celui d'un nuage.

