J'ai un client HTTP en Python qui doit utiliser TLS. J'ai non seulement besoin de pour effectuer des connexions cryptées, mais aussi pour récupérer des informations à partir de la machine distante , telle que l'émetteur du certificat. Je dois faire connexion à de nombreux serveurs HTTP, souvent mal comporté, donc j'ai absolument besoin d'avoir un délai d'attente. Avec des connexions non-TLS, mysocket.settimeout(5)
fait ce que je veux.Connexion TLS avec des délais (et quelques autres difficultés)
Parmi les nombreux TLS modules Python:
python-gnutls ne permet pas d'utiliser setTimeout() sur les sockets parce que il utilise des sockets non bloquants:
gnutls.errors.OperationWouldBlock: Function was interrupted.
python-openssl a un problème similaire:
OpenSSL.SSL.WantReadError
Le SSL module de la bibliothèque standard ne fonctionne pas avec Python 2.5.
D'autres bibliothèques comme TLSlite ne donnent apparemment pas accès à les métadonnées du certificat.
Le programme est enfilé, donc je ne peux pas utiliser de signaux. J'ai besoin de contrôle détaillé sur la boîte de dialogue HTTP, donc je ne peux pas utiliser une bibliothèque standard comme urllib2. Contexte: c'est le le projet d'enquête DNSwitness. Filetage SO pertinents: Timeout on a Python function call et How to limit execution time of a function call in Python.
Mais est-il pas une sorte d'attente occupé, très coûteux pour le processeur? – bortzmeyer
Vous pouvez toujours insérer un sleep, céder le scheduler, ou faire autre chose. Et ce n'est pas comme si vous passiez une longue période dans la boucle, les bons serveurs essayent de répondre assez rapidement. –