urllib3 est une bibliothèque Python HTTP avec le regroupement de connexions thread-safe et fichier de post soutien.
Faits saillants:
& Nbsp; * Re-utiliser la même connexion de socket pour plusieurs demandes (HTTPConnectionPool)
& Nbsp; * affichage du fichier (encode_multipart_formdata)
& Nbsp; * Built-in de redirection et de tentatives (facultatif)
& Nbsp; * thread-safe
Quel est le problème avec urllib et urllib2?
Il ya deux caractéristiques essentielles manquantes de la bibliothèque standard Python: Connexion réutilisation / mise en commun et l'affichage de fichiers. Il ne est pas très difficile à mettre en œuvre ces soi-même, mais il est beaucoup plus facile d'utiliser un module qui a déjà fait le travail pour vous.
Les bibliothèques standard Python urllib et urllib2 ont peu à voir avec l'autre. Ils ont été conçus pour être indépendant et autonome, la résolution de chaque une portée différente des problèmes et urllib3 suit dans la même veine.
Pourquoi dois-je tiens à réutiliser des connexions?
Performance. Lorsque vous le faites normalement un appel de urllib, une connexion socket distincte est créée à chaque demande. En réutilisant prises existantes (soutenus depuis HTTP 1.1), les demandes auront moins de ressources sur la fin du serveur, et également fournir un temps de réponse plus rapide à la fin de le client. Avec quelques repères simples (voir test / benchmark.py), le téléchargement de 15 URL google.com est environ deux fois plus rapide lors de l'utilisation HTTPConnectionPool (qui utilise une connexion) que d'utiliser urllib plaine (qui utilise 15 connexions).
Cette bibliothèque est parfait pour:
& Nbsp; * Parler à un API
& Nbsp; * Crawling un site Web
& Nbsp; * Toute situation où être en mesure de publier des fichiers, gérer la redirection, et une nouvelle tentative est utile. Il est relativement léger, de sorte qu'il peut être utilisé pour ne importe quoi!
Exemples:
Accédez au wiki Exemples pour des exemples de syntaxe en surbrillance plus belles.
Mais, longue histoire courte:
importation de urllib3 HTTPConnectionPool
API_URL = 'http://ajax.googleapis.com/ajax/services/search/web'
http_pool = HTTPConnectionPool.from_url (API_URL)
champs = {'v': '1.0', 'q': 'urllib3'}
r = http_pool.get_url (API_URL, domaines)
Imprimer r.status, r.data p>
Ce qui est nouveau dans cette version:
- Ajout de urllib3.add_stderr_logger () pour rapidement permettant l'enregistrement de débogage STDERR dans urllib3.
- URL complète maternelle analyse (y compris auth, chemin, requête, fragment) disponible dans urllib3.util.parse_url (URL).
- Built-in redirection basculera méthode pour 'GET' si le code d'état est 303. (numéro 11)
- urllib3.PoolManager dépouille le système et l'hôte avant d'envoyer la demande uri. (Issue # 8)
- Nouveau urllib3.exceptions.DecodeError exception lorsque le décodage automatique, basé sur l'en-tête Content-Type, échoue.
- Correction d'un bug avec piscine épuisement et les raccords non étanches (fascicule n ° 76). Ajouté connexion explicite fermeture sur la piscine expulsion. Ajouté urllib3.PoolManager.clear ().
- 99% - & gt; La couverture de test unitaire de 100%.
Ce qui est nouveau dans la version 1.4:.
- correctifs relatifs AppEngine-mineures
- commuté de mimetools.choose_boundary à uuid.uuid4 ().
- Amélioration de l'analyse des URL. (Issue # 73)
- IPv6 soutien url. (Issue # 72)
Ce qui est nouveau dans la version 1.3:.
- -1.0 pré API obsolète Suppression
- aides remaniée avec un sous-module de urllib3.util.
- encodage multipart fixe pour soutenir de liste de tuples pour les clés avec des valeurs multiples. (Issue # 48)
- multiples têtes Set-Cookie fixe en réponse ne pas se faire correctement fusionné en Python 3. (Issue # 53)
- Support AppEngine avec PY27. (Issue # 61)
- corrections de encode_multipart_formdata mineures liées à Python 3 cordes vs octets.
Quoi de neuf dans la version 1.2.2:
- bug d'emballage fixe des exigences d'essai ne sont pas expédiés. sms. (Issue # 47)
Quoi de neuf dans la version 1.2.1:
- Correction d'un autre bogue lié à lorsque le module SSL ne est pas disponible. (Numéro 41)
- Lieu erreurs d'analyse soulèvent maintenant urllib3.exceptions.LocationParseError qui hérite de ValueError.
Quoi de neuf dans la version 1.2:
- Ajouté Python 3 support (testé sur 3.2.2)
- Laissé tomber Python 2.5 support (testé sur 2.6.7, 2.7.2)
- Utiliser select.poll lieu de select.select pour les plateformes qui le soutiennent.
- Utiliser Queue.LifoQueue lieu de Queue.Queue pour la réutilisation de connexion plus agressif. Configurable en remplaçant ConnectionPool.QueueCls.
- ImportError fixe lors de l'installation lorsque le module SSL ne est pas disponible. (Numéro 41)
- PoolManager fixe redirige entre les régimes (tels que HTTP - & gt; HTTPS) ne terminent pas correctement. (Issue # 28, découvert par Problème n ° 10 à v1.1)
- dummyserver Portage à utiliser tornade lieu de WebOb + eventlet. Suppression des étrangers non pris en charge backends de test de dummyserver. Tests de niveau du socket ajouté.
- Plus de tests. Succès déverrouillés:. Couverture de 99%
Quoi de neuf dans la version 1.1:
- Refonte dummyserver à son propre module d'espace de noms racine (utilisé pour les tests ).
- la vérification du nom d'hôte ajoutée pour VerifiedHTTPSConnection par vendoring dans le ssl_match_hostname de Py32. (Issue # 25)
- redirections HTTP croix-Hôte fixe lors de l'utilisation PoolManager. (Numéro 10)
- decode_content fixe ignoré lorsqu'il est réglé par urlopen. (Issue # 27)
- les bogues de délai fixe. (Questions # 17, # 23)
Ce qui est nouveau dans la version 1.0.2:
- Correction d'une faute dans VerifiedHTTPSConnection qui ne ferait que présente comme un bug si vous utilisez l'objet manuellement. (Merci Pyos)
- Made RecentlyUsedContainer (et par conséquent PoolManager) plus thread-safe en enveloppant le journal d'accès dans un mutex. (Mercichrister)
- Made RecentlyUsedContainer plus dict-like (__delitem__ corrigée et le comportement __getitem__), avec des tests. Ne devrait pas affecter code urllib3 noyau.
Ce qui est nouveau dans la version 1.0.1:
- Correction d'un bug où la même connexion obtiendrait retourné dans la piscine deux fois, provoquant étrangère & quot; HttpConnectionPool est plein & quot; connecter avertissements.
Exigences :
- Python
Commentaires non trouvées