我試圖用rauth做的OAuth與Twitter,但它似乎並出現以下錯誤地失敗:爲什麼請求在嘗試訪問Twitter的API時引發此SSLError?
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
一些測試後,我發現,請求似乎試圖訪問API時被打破。 twitter.com並驗證https連接。下面是一個例子,這似乎爲https://github.com工作,但失敗了https://api.twitter.com:
>>> import requests
>>> requests.get('https://github.com', verify=True)
<Response [200]>
>>> requests.get('https://api.twitter.com/oauth/request_token',verify=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "requests/api.py", line 65, in get
return request('get', url, **kwargs)
File "requests/safe_mode.py", line 39, in wrapped
return function(method, url, **kwargs)
File "requests/api.py", line 51, in request
return session.request(method=method, url=url, **kwargs)
File "requests/sessions.py", line 252, in request
r.send(prefetch=prefetch)
File "requests/models.py", line 632, in send
raise SSLError(e)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
>>> requests.get('https://api.twitter.com',verify=True)
[SNIP] Same error as above
這是在請求中的錯誤?這應該與rauth運行的類似,所以我不確定它爲什麼不能在我的機器上運行。
與@托馬斯 - 奧羅斯科一些偉大的disccusion這似乎是一個OpenSSL的是無法驗證的G2 VeriSign證書:http://pastebin.com/ZZj3s5uN
但看來我用certool有威瑞信CA:
certtool y k=/System/Library/Keychains/SystemCACertificates.keychain | grep -i verisign
chrome/safari正在使用哪一個,而不是通過命令行上的openssl。有什麼我可以做的,以便請求將加載正確的證書?
這不是一個「請求」問題,而是一個SSL問題。我似乎也沒有遇到這個問題。您可能想了解一下http://marc.info/?l=openssl-users&m=124875408916917關於如何調試的一些想法。基本上,你應該嘗試使用'openssl s_client -debug'。 –
我正在使用一個幾乎格式化的OSX 10.8安裝,所以我不知道爲什麼openssl是問題。也從我上面的例子github https驗證,但api.twitter不。檢查出openssl:http://pastebin.com/ZZj3s5uN它似乎無法獲得本地簽發者證書。是否有一個原因,沒有加載twitter鏈,但在同一個系統上的鉻工作? _感謝您找到link_ – Alex
您的'openssl'安裝似乎缺少以下證書:'/ C = US/O = VeriSign,Inc./OU=Class 3公共主認證機構 - G2/OU =(c)1998 VeriSign,Inc. - 僅限授權使用/ OU =威瑞信託網絡。這很令人驚訝,但我的OpenSSL安裝了它 - 但是我正在運行Ubuntu。也許http://gagravarr.org/writing/openssl-certs/others.shtml#ca-osx可以幫助你。 –