2009-12-21 10 views
1

j'utilise pycurl pour tester un service de redirection que nous sommes un utilisateur frappe offre-http://xyz.com/asdf/ et est redirigé vers https://a.com, https://b.com et https://c.com. J'essaie d'utiliser PyCURL pour demander http://xyz.com, et imprimer (mais pas HTTP request) la chaîne "https: // {a | b | c} .com", mais chaque fois que l'URL de destination est HTTPS et pas HTTP, méthode PyCURL.request() renvoie l'exception suivante:pycurl: TLS Handshake erreur

(35, 'gnutls_handshake() failed: A TLS fatal alert has been received.')

recherche sur Google pour « pycurl erreur tls » ne se présente pas de résultats, sauf celui qui insinue que pycurl pour Ubuntu utilise GnuTLS au lieu de OpenSSL. Est-ce ce qui cause mon problème? Si oui, comment configurer PyCURL pour utiliser OpenSSL?

Mon OS est Ubuntu 9.10, Python 2.6, et voici ma version pycurl information

>>> pycurl.version_info()

(3, '7.19.5', 463621, 'x86_64-pc-linux-gnu', 1597, 'GnuTLS/2.8.3', 0, '1.2.3.3', ('tftp', 'ftp', 'telnet', 'dict', 'ldap', 'ldaps', 'http', 'file', 'https', 'ftps'), None, 0, '1.15')

Merci à l'avance!

Répondre

2

Je viens de résoudre le même problème. Je ne suis pas sûr à 100% de ce qui n'allait pas. Mais j'ai installé pycurl via apt-get install python-pycurl qui je pense utilise par défaut gnutls, mais il me semblait qu'il devrait être openssl sur mon système.

Je résolus en procédant comme suit:

export PYCURL_SSL_LIBRARY=[openssl|gnutls|nss] (choisir l'un des 3, OpenSSL, GnuTLS ou NSS, sans les crochets)

pip install pycurl --upgrade

Si votre version de pycurl est déjà à la dernière version, supprimez-le en exécutant la commande suivante pip uninstall pycurl et exécutez les commandes ci-dessus.

source: http://pycurl.sourceforge.net/doc/install.html

1

pycurl utilise libcurl et libcurl peut être construit pour utiliser l'une des bibliothèques TLS. GnuTLS et OpenSSL étant deux d'entre eux. Vous pouvez donc reconstruire libcurl pour utiliser celui que vous préférez.