我正在使用PyCURL来测试我们提供的重定向服务 - 用户点击http://xyz.com/asdf/并被重定向到https://a.com,https://b.com和https://c.com。
我正在尝试使用PyCURL来请求http://xyz.com,并打印出(但不是HTTP请求)字符串“https:// {a | b | c} .com”,但每当目标网址是HTTPS而不是HTTP,PyCURL.request()方法抛出以下异常:
(35, 'gnutls_handshake() failed: A TLS fatal alert has been received.')
谷歌搜索“pycurl tls错误”没有出现很多结果,除了提示用于Ubuntu的PyCURL使用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')
提前致谢!
答案 0 :(得分:2)
我刚刚解决了同样的问题。我不是百分百肯定出了什么问题。
但我通过apt-get install python-pycurl
安装了pycurl,我认为默认使用gnutls,但在我看来它应该是我系统上的openssl。
我通过执行以下操作解决了这个问题:
export PYCURL_SSL_LIBRARY=[openssl|gnutls|nss]
(选择3,openssl,gnutls或nss中的一个,不带括号)
pip install pycurl --upgrade
如果您的pycurl版本已经是最新版本,请执行以下命令pip uninstall pycurl
将其删除并运行上述命令。
答案 1 :(得分:1)
pycurl使用libcurl和libcurl可以构建为使用多个TLS库之一。 GnuTLS和OpenSSL是其中两个。因此,您可以重建libcurl以使用您喜欢的那些。