我意識到這個響應已經晚了幾年,但我也遇到了同樣的問題,並且不想依賴libcurl被安裝在我運行這個的機器上。希望這對未來找到這篇文章的人有用。
問題是httplib.HTTPSConnection.connect
沒有指定SSL上下文或版本的方法。在您點擊腳本的內容以獲得快速解決方案之前,您可以覆蓋此功能。
一個重要的考慮因素是,如上所述,此解決方法不會驗證服務器證書的有效性。
import httplib
import socket
import ssl
import urllib2
def connect(self):
"Connect to a host on a given (SSL) port."
sock = socket.create_connection((self.host, self.port),
self.timeout, self.source_address)
if self._tunnel_host:
self.sock = sock
self._tunnel()
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=ssl.PROTOCOL_TLSv1)
httplib.HTTPSConnection.connect = connect
opener = urllib2.build_opener()
f = opener.open('https://www.google.com/')
*注:此替代connect()
功能是複製/粘貼httplib.py,並簡單地修改了wrap_socket()
調用指定ssl_version
不幸的是,urllib2的和httplib的[不做任何覈查證書](http://docs.python.org/library/httplib.html#httplib.HTTPSConnection),這使得SSL/TLS不安全。如果您想要安全地使用這個HTTP庫(這往往是使用HTTPS的要點),您可能需要使用另一個HTTP庫。想到libcurl綁定。 – Bruno
當然要考慮的重要一點 –
我明白ssl支持是可用的,但是需要SSLv3的站點會因爲python中的錯誤返回上面提到的錯誤,或者這是Google搜索告訴我的。 –