2009-12-15 3 views
3

Est-il possible de mettre plusieurs demandes sans rompre la connexion en utilisant python httplib ?. Comme, puis-je télécharger un gros fichier sur le serveur dans certaines parties, mais dans une connexion à un seul socket.demandes multiples dans une seule connexion?

J'ai cherché des réponses. Mais rien ne semblait si clair et si définitif.

Tous les exemples/liens associés seront utiles. Merci.

Répondre

11

Oui, la connexion reste ouverte jusqu'à ce que vous la fermiez à l'aide de la méthode close().

L'exemple suivant, tiré du httplib documentation, montre comment effectuer plusieurs requêtes en utilisant une seule connexion:

>>> import httplib 
>>> conn = httplib.HTTPConnection("www.python.org") 
>>> conn.request("GET", "/index.html") 
>>> r1 = conn.getresponse() 
>>> print r1.status, r1.reason 
200 OK 
>>> data1 = r1.read() 
>>> conn.request("GET", "/parrot.spam") 
>>> r2 = conn.getresponse() 
>>> print r2.status, r2.reason 
404 Not Found 
>>> data2 = r2.read() 
>>> conn.close() 
+0

cela vous dérangerait de regarder http://stackoverflow.com/questions/18221809/sending-a-few-requests-using-one-connection –

2

Vous devez être sûr d'appeler la fonction .read() sur votre réponse. Sinon, vous obtiendrez une erreur comme:

Traceback (most recent call last): 
    File "<pyshell#13>", line 1, in <module> 
    conn.request("GET", "/2.html") 
    File "C:\Python27\lib\httplib.py", line 955, in request 
    self._send_request(method, url, body, headers) 
    File "C:\Python27\lib\httplib.py", line 983, in _send_request 
    self.putrequest(method, url, **skips) 
    File "C:\Python27\lib\httplib.py", line 853, in putrequest 
    raise CannotSendRequest() 
CannotSendRequest 

Cette exception est levée si les données de retour n'a pas été lu (même si aucune donnée est renvoyée, ou une erreur HTTP a été recieved [404 par exemple]).

Questions connexes