2009-12-21 85 views
1

我正在使用PyCURL来测试我们提供的重定向服务 - 用户击中http://xyz.com/asdf/并被重定向到https://a.com,https://b.comhttps://c.comPyCURL:TLS握手错误

我试图使用PyCURL请求http://xyz.com,并打印出(但不是HTTP请求)字符串“https:// {a | b | c} .com”,但是每当目标URL是HTTPS并且不HTTP,PyCURL.request()方法引发以下例外:

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

谷歌搜索“pycurl TLS错误”不转了许多的结果,除了一个暗示pyCURL为Ubuntu使用代替的GnuTLS OpenSSL的。这是什么原因导致我的问题?如果是这样,我如何配置PyCURL来使用OpenSSL?

我的操作系统是Ubuntu 9.10的,Python 2.6中,这是我的PyCURL版本信息提前

>>> 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')

谢谢!

回答

2

我刚刚解决了同样的问题。我不是100%肯定有什么问题。 但我安装pycurl通过apt-get install python-pycurl,我认为默认情况下使用gnutls,但在我看来,它应该openssl在我的系统上。

我这样做解决了下列文件:

export PYCURL_SSL_LIBRARY=[openssl|gnutls|nss](选择3,OpenSSL的,GNUTLS或NS的一个,没有括号)

pip install pycurl --upgrade

如果您pycurl的版本已经是在最新版本中,通过执行以下命令pip uninstall pycurl将其删除并运行上述命令。

来源:http://pycurl.sourceforge.net/doc/install.html

1

pycurl使用libcurl和libcurl可以构建使用几个TLS库之一。 GnuTLS和OpenSSL就是其中的两个。因此,您可以重新编译libcurl以使用您喜欢的那些。