Comment puis-je faire une requête HTTP "garder en vie" en utilisant urllib2 de Python?
Réponses
Trop de publicités?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
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.
Ou consultez HTTPConnection de httplib.
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
Évitez les douleurs collectives et utilisez plutôt Requests . Il fera le bon choix par défaut et utilisera Keep-Alive si applicable.