2010-12-08 31 views
4

Pour l'instant je fais ceci: (python3, urllib)Comment rester en vie dans HTTP/1.1 en utilisant python urllib

url = 'someurl' 
headers = '(('HOST', 'somehost'),/ 
      ('Connection', 'keep-alive'),/ 
      ('Accept-Encoding' , 'gzip,deflate')) 
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor()) 
for h in headers: 
    opener.addheaders.append(x) 
data = 'some logging data' #username, pw etc. 
opener.open('somesite/login.php, data) 

res = opener.open(someurl) 
data = res.read() 
... some stuff here... 
res1 = opener.open(someurl2) 
data = res1.read() 
etc. 

Ce qui se passe est ce; Je continue d'obtenir des réponses gzippées du serveur et je suis resté connecté (je récupère du contenu qui n'est pas disponible si je n'étais pas connecté) mais je pense que la connexion est en train de tomber entre chaque requête opener.open;

Je pense que parce que la connexion est très lente et il semble qu'il y ait une nouvelle connexion à chaque fois. Deux questions:

a) Comment puis-je tester si la connexion est en train de rester en vie/en train de mourir
b) Comment faire en sorte qu'elle reste vivante entre les demandes d'autres URL?

Prenez soin :)

+0

a) Renifler le trafic serait un moyen trivial de vérifier si vous restez en vie. Assurez-vous que le serveur prend également en charge keepalive. Comme pour b), au moins dans python2.x, il y avait un moyen de spécifier un gestionnaire qui pourrait keepalive, mais il ne semblait pas par défaut. – Robert

+1

dupliquer http://stackoverflow.com/questions/1037406/python-urllib2-with-keep-alive – khachik

+0

Eh bien, d'abord ceci est python3 et cet urlgrabber recommandé dans l'autre thread est supposé pour 2.5 et avant et second je préférerais évitez d'utiliser des bibliothèques externes pour cette tâche apparemment simple; surtout parce que je veux comprendre comment ces choses fonctionnent –

Répondre

1

Ce sera une réponse très retardée, mais:

Vous devriez voir urllib3. C'est pour Python 2.x mais vous aurez l'idée quand vous verrez leur document README.

Et oui, urllib par défaut ne garde pas la vie, je suis en train de mettre en œuvre urllib3 pour Python 3 à rester dans ma toolbag :)

0

Juste si vous ne saviez pas encore, python-requests offre une fonction de keep-alive, grâce à urllib3.