
Quelle est la différence entre ces deux bibliothèques de requêtes asynchrones ?
Les confrères engagés dans les crawlers de réseau ont dû rencontrer cette situation : évidemment écrire un bon code, les résultats du site une limite de vitesse sur l'aveugle. À cette époque, la bibliothèque de requêtes asynchrones est une bouée de sauvetage, aiohttp et httpx sont souvent comparés. Tout d'abord, une différence vernaculaire : aiohttp est comme un focus sur le sprint, spécialement né pour l'asynchrone ; httpx est plus comme un joueur polyvalent, synchrone asynchrone peut jouer.
Prenons un exemple réaliste : supposons que vous souhaitiez utiliser un proxy IP pour détecter par lots 100 pages web. Avec aiohttp, vous devrez construire vos propres roues pour gérer le pool de connexions, alors que httpx est livré avec un multiplexeur de pool de connexions, ce qui est beaucoup plus convivial pour les novices. Mais aiohttp est vraiment plus rapide et plus léger dans un environnement purement asynchrone, en particulier lorsqu'il s'agit de l'applicationlongue connexionCela permet d'économiser beaucoup de mémoire lorsqu'il s'agit de l'utilisation de l'application.
Quelle est la meilleure configuration IP pour le proxy ?
Voici l'essentiel ! Nous collectons des données sur les paramètres de proxy les plus problématiques. Le test a révélé que la configuration du proxy de aiohttp devrait être écrite comme ceci :
import aiohttp
async avec aiohttp.ClientSession() comme session.
async avec session.get('https://目标网站', proxy="http://user:pass@ipipgo-proxy.com:端口") as resp.
print(await resp.text())
La façon dont httpx est écrit est plus proche du style des requêtes :
import httpx
async avec httpx.AsyncClient(proxies="http://user:pass@ipipgo-proxy.com:端口") as client : resp = await client.get("http://user:pass@ipipgo-proxy.com:端口")
resp = await client.get("https://目标网站")
Il y a un piège à éviter : la fonctionLe paramètre proxy doit avoir un en-tête de protocole(http://或https://) que httpx reconnaîtra automatiquement. Nous recommandons ici d'utiliser le service proxy d'ipipgo, dont la famille fournit des modèles d'authentification prêts à l'emploi, que l'on peut directement copier et coller, ce qui permet de s'épargner des épissures de chaînes de caractères.
Concours de performance en conditions réelles
Testons avec un scénario réel (environnement de test : 100 requêtes/5 concurrences) :
| norme | aiohttp | httpx |
|---|---|---|
| Réponse moyenne | 1,2 seconde | 1,5 seconde |
| empreinte mémoire | 78MB | 105MB |
| Gestion des exceptions | Nécessité de réessayer manuellement | mécanisme de réessai intégré |
Vous voyez ? aiohttp a un avantage en termes de vitesse, mais httpx est accompagné d'un avantage en termes de sécurité.fonction de rappel automatiqueC'est vraiment parfumé. En particulier lorsque l'on utilise des proxies à haute disponibilité comme ipipgo, avec le mécanisme de réessai, le taux de réussite peut atteindre plus de 99%. Mais la consommation de mémoire dépend de la situation spécifique, s'il s'agit d'une tâche de courte durée, cet écart peut être ignoré.
Lequel dois-je choisir ?
Donner des conseils solides :
- besoinPerformance maximaleSélectionnez aiohttp
- contraindrePour commencerUtiliser httpx
- Nécessité d'un traitement simultanéSynchrone + AsynchroneSélection demandée httpx
Prenons un cas concret : avant d'aider des amis à surveiller les prix du commerce électronique, il fallait à la fois escalader la plate-forme nationale et le site d'outre-mer (bien sûr, en utilisant le nœud mondial d'ipipgo). Finalement, nous avons utilisé httpx pour y parvenir, parce qu'il pouvaitCommutation automatique entre HTTP/1.1 et HTTP2certains sites doivent utiliser HTTP2 pour y accéder, ce que aiohttp ne prend pas encore en charge.
Foire aux questions QA
Q : Que dois-je faire si le proxy interrompt toujours la connexion ?
R : Utilisez d'abord l'interface de test fournie par ipipgo pour vérifier si le proxy est disponible, puis vérifiez les paramètres de délai d'attente. Il est recommandé de fixer le délai d'attente à plus de 15 secondes, en particulier pour les nœuds à forte latence.
Q : Comment configurer le proxy HTTPS ?
R : Remplacez simplement http par https dans l'adresse du proxy, par exemple : "https://user:pass@ipipgo-ssl-proxy.com:端口". Notez que certaines anciennes versions de la bibliothèque peuvent ne pas être supportées, il est recommandé d'utiliser la dernière version de httpx.
Q : Que se passe-t-il si je dois changer fréquemment d'agent ?
R : Il est recommandé d'utiliser le service de proxy dynamique d'ipipgo.forfait de facturation basé sur la quantitéPrise en charge de la commutation automatique d'IP, directement dans le point de terminaison défini par le code sur la ligne, sans avoir à maintenir son propre pool d'IP.
Conseils personnels sur la fosse
Quelques remarques finales :
- Ne pas utiliser time.sleep() dans les fonctions asynchrones, utiliser asyncio.sleep()
- La validation du proxy échoue en vérifiant d'abord lesolde du compte(Ne riez pas, il y a tant de gens qui oublient de renouveler leur adhésion).
- Les erreurs SSL peuvent être rencontrées en ajoutant
verify=Falseest une solution temporaire, mais les environnements de production doivent se souvenir de faire correspondre le certificat.
En bref, il faut choisir les outils en fonction des besoins du projet et ne pas suivre la tendance. Les petits projets avec aiohttp sont peu chargés, les entreprises complexes avec httpx sont plus inquiètes. Les services de proxy fortement recommandés ipipgo, leur famille deNœuds de Pékin, Shanghai, ShenzhenLe temps de latence est inférieur à 50 ms, ce qui est très satisfaisant pour les affaires domestiques.

