Je ne suis pas sûr si c'est un bug ou si je fais juste quelque chose de mal. Si je devais faire une connexion HTTP comme ceci:Python HTTPSConnection.close() ne semble pas fermer la connexion?
import httplib
http_connection = httplib.HTTPConnection("192.168.192.196")
http_connection.request("GET", "/")
http_connection.sock.settimeout(20)
response = http_connection.getresponse()
data = response.read()
http_connection.close()
Puis, à une invite DOS, je fais ceci:
netstat -ano | find /i "192.168.192.196:80" | find /i "ESTABLISHED"
je reçois rien.
Cependant, si je fais la même chose, mais le changement à un HTTPSConnection:
import httplib
http_connection = httplib.HTTPSConnection("192.168.192.196")
http_connection.request("GET", "/")
http_connection.sock.settimeout(20)
response = http_connection.getresponse()
data = response.read()
http_connection.close()
faites ceci:
netstat -ano | find /i "192.168.192.196:443" | find /i "ESTABLISHED"
Je verrai en fait que la connexion reste établie jusqu'à ce que je fait^Z hors du shell Python.
Cela se produit dans l'une des applications dont je suis responsable. Python n'est pas vraiment suspendu - il laisse simplement la connexion ouverte.
Est-ce que je fais quelque chose de mal ici? Ai-je besoin de code supplémentaire pour fermer la connexion HTTPS?
Ceci est Python 2.6.4, btw.
Lorsque j'essaie cela (sur Windows XP en utilisant Python 2.6.4), je vois que la connexion va à CLOSE_WAIT et finit par disparaître. Votre serveur fait-il quelque chose de bizarre? –
C'est bizarre. Si vous supprimez la connexion ('del http_connection') et exécutez le garbage collector, la connexion se ferme. Cela fonctionne également avec Python 3.1, peut-être parce que le comportement du GC a changé, peut-être pas ... – AndiDog
Dave Bacher: Non, je ne pense pas que le serveur fasse quelque chose de bizarre. J'ai aussi essayé cela sur un serveur web HTTPS standard et ça fait la même chose. AndiDog: Exécuter gc.collect() semble effacer la connexion ... Je ne suis pas sûr de l'impact que cela aura. – Dave