python treq échoue avec l’erreur Twisted / OpenSSL en raison du magasin d’approbation vide sous Windows

Lorsque j’exécute l’exemple de code suivant sur http://www.google.com , cela fonctionne correctement Mais lorsque j’essaie sur https://www.google.com , j’obtiens cette erreur:

Requesting https://www.google.com Unhandled error in Deferred: Unhandled Error Traceback (most recent call last): Failure: twisted.web._newclient.ResponseNeverReceived: [<twisted.python.failure.Failure >] 

J’utilise python 2.7.8, tordu 14.0.2, service_identity 14.0.0, treq 0.2.1, OpenSSL 0.14

 import treq from twisted.internet import reactor, defer import sys @defer.inlineCallbacks def doit(url): print "Requesting "+ url + "\n" results = yield treq.get(url) print "...got results\n" content = yield results.content() print "%s"%content reactor.stop() def main(): url = sys.argv[1] reactor.callLater(0, doit, url) reactor.run() if __name__ == '__main__': main() 

Merci d’avance!

Le problème ici est probablement que vous n’avez aucune racine de confiance sélectionnée, alors OpenSSL ne parvient pas à authentifier la connexion.

Vous pouvez obtenir des racines d’approbation dans un format que OpenSSL peut consumr en effectuant l’ pip install certifi , puis définissez votre variable d’environnement SSL_CERT_FILE pour qu’elle pointe à la sortie de python -m certifi . En Python, vous pouvez le faire avec le import certifi; os.environ["SSL_CERT_FILE"] = certifi.where() import certifi; os.environ["SSL_CERT_FILE"] = certifi.where() tout en haut de votre script (avant d’importer des liaisons OpenSSL).