42 votes

Python urllib2 avec Keep Alive

Comment puis-je faire une requête HTTP "garder en vie" en utilisant urllib2 de Python?

34voto

msanders Points 2921

Utiliser le urlgrabber de la bibliothèque. Cela inclut un gestionnaire HTTP pour urllib2 qui supporte le protocole HTTP 1.1 et keepalive:

>>> import urllib2
>>> from urlgrabber.keepalive import HTTPHandler
>>> keepalive_handler = HTTPHandler()
>>> opener = urllib2.build_opener(keepalive_handler)
>>> urllib2.install_opener(opener)
>>> 
>>> fo = urllib2.urlopen('http://www.python.org')

Remarque: vous devez utiliser urlgrabber version 3.9.0 ou plus tôt, selon le keepalive module a été retiré dans la version 3.9.1

@PiPeep a porté le keepalive module Python 3.

13voto

Piotr Dobrogost Points 14412

Essayez urllib3 qui a les caractéristiques suivantes:

  • Ré-utiliser le même socket de connexion pour plusieurs demandes (HTTPConnectionPool et HTTPSConnectionPool) (en option avec certificat côté client de vérification).
  • Fichier affichage (encode_multipart_formdata).
  • Built-in de redirection et de tentatives (en option).
  • Prend en charge gzip et deflate décodage.
  • Thread-safe et santé mentale-fort.
  • Petit et facile à comprendre codebase parfait pour l'extension et de construction de sur. Pour une solution plus complète, avoir un regard sur les Demandes.

ou une solution plus complète - Demandes - qui prend en charge keep-alive à partir de la version 0.8.0 (en utilisant urllib3 à l'interne) et a les suivantes caractéristiques:

  • Extrêmement simple TÊTE, GET, POST, PUT, PATCH, SUPPRIMER les Demandes.
  • Gevent de soutien pour un Système de Demandes.
  • Des séances avec des cookies persistience.
  • Basic, Digest, et Personnalisée en charge de l'Authentification.
  • Automatique de formulaire de codage de dictionnaires
  • Un simple dictionnaire de l'interface de requête/réponse cookies.
  • Multipart de téléchargement de fichiers.
  • Automatc décodage de l'Unicode, gzip et deflate réponses.
  • Support complet de l'unicode des URLs et de noms de domaine.

6voto

Mark Points 3861

Ou consultez HTTPConnection de httplib.

4voto

speedplane Points 3828

Notez que urlgrabber ne fonctionne pas entièrement avec Python 2.6. J'ai corrigé les problèmes (je pense) en apportant les modifications suivantes dans keepalive.py.

Dans keepalive.HTTPHandler.do_open (), supprimez cette

      if r.status == 200 or not HANDLE_ERRORS:
         return r
 

Et insérer ceci

      if r.status == 200 or not HANDLE_ERRORS:
         # [speedplane] Must return an adinfourl object
         resp = urllib2.addinfourl(r, r.msg, req.get_full_url())
         resp.code = r.status
         resp.msg = r.reason
         return resp
 

3voto

Prof. Falken Points 10242

Évitez les douleurs collectives et utilisez plutôt Requests . Il fera le bon choix par défaut et utilisera Keep-Alive si applicable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X