2012-05-11 3 views
0

Dropbox Python SDK를 사용하는 방법을 배우고 있습니다. 그러나 요청 토큰을 생성하려고 할 때 문제가 발생합니다. 여기에 내가 사용하고있는 코드입니다 (내가 여기 APP_KEY와 APP_SECRET 내 실제 응용 프로그램 키와 비밀을 교체 한주의는,하지만 난 그것을 밖으로 시도 할 때 내 실제 응용 프로그램 키와 비밀을 사용했다.) 내가 가진Dropbox Python SDK SSL 오류

from dropbox import client, rest, session 
APP_KEY = 'APP_KEY' 
APP_SECRET = 'APP_SECRET' 
ACCESS_TYPE = 'app_folder' 
print 'Creating session object' 
sess = session.DropboxSession(APP_KEY, APP_SECRET, ACCESS_TYPE) 
print 'Session created!\nCreating request token' 
request_token = sess.obtain_request_token() 
print 'Created request token!' 
url = sess.build_authorize_url(request_token) 
print url 
raw_input() 
access_token = sess.obtain_access_token(request_token) 
client1 = client.DropboxClient(sess) 
print client1.account_info() 

프로그램은 오류가 발생한 위치를 볼 수 있도록 다른 객체를 생성 할 때 메시지를 출력합니다. 이 출력은 다음과 같습니다.

[email protected]:~/Twisted$ python example.py 
Creating session object 
Session created! 
Creating request token 
Traceback (most recent call last): 
    File "example.py", line 8, in <module> 
    request_token = sess.obtain_request_token() 
File "/usr/local/lib/python2.7/dist-packages/dropbox-1.4-py2.7.egg/dropbox/session.py", line 160, in obtain_request_token 
response = rest.RESTClient.POST(url, headers=headers, params=params, raw_response=True) 
File "/usr/local/lib/python2.7/dist-packages/dropbox-1.4-py2.7.egg/dropbox/rest.py", line 140, in POST 
    return cls.request("POST", url, post_params=params, headers=headers, raw_response=raw_response) 
File "/usr/local/lib/python2.7/dist-packages/dropbox-1.4-py2.7.egg/dropbox/rest.py", line 64, in request 
    conn = ProperHTTPSConnection(host, 443) 
File "/usr/local/lib/python2.7/dist-packages/dropbox-1.4-py2.7.egg/dropbox/rest.py", line 214, in __init__ 
    self.cert_reqs = ssl.CERT_REQUIRED 
AttributeError: 'module' object has no attribute 'CERT_REQUIRED' 

이전에이 코드를 사용해 보았으므로이 문제가 발생하지 않았습니다. 또한 Dropbox SDK를 제거하고 다시 설치해도 아무런 결과가 없습니다. 이 문제의 원인은 무엇이며 어떻게 해결할 수 있습니까?

UPDATE

Kannan은의 코드를 추가 한 후, 출력은 다음과 같습니다 Ready Generating session Session Generated! Generating request token ['Certificate', 'CertificateOptions', 'CertificateRequest', 'Client', 'ClientContextFactory', 'Connector', 'ContextFactory', 'DN', 'DefaultOpenSSLContextFactory', 'DistinguishedName', 'KeyPair', 'Port', 'PrivateCertificate', 'SSL', 'Server', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'implementedBy', 'implements', 'implementsOnly', 'interfaces', 'supported', 'tcp'] 그런 다음 나는 오류가 발생합니다. 나는 SSL 인증서를 다시 만들려고 노력했다.

+0

당신은 또한'인쇄 SSL .__ 파일 ___을'했나요? 'dir (ssl)'결과에서, 표준'ssl' 대신 Twisted의'twisted.internet.ssl'을 얻는 것처럼 보입니다. 수입 경로가 어쩌면 엉망이 되었습니까? –

+0

당신이 옳았어요! ssl .__ file__은 /usr/lib/python2.7/dist-packages/twisted/internet/ssl.pyc를 출력합니다. * - ** twisted.internet.ssl ​​**을 가져 와서 내 클라이언트와 서버 프로그램간에 안전한 연결을 설정할 수 있다는 사실을 잊어 버렸습니다.나는 twisted_ssl **에서 twisted.internet import ssl **로 import 문을 변경하여 Dropbox를 방해하지 않도록하고 ** ** ssl ** ** ** reactor.listenSSL **에 대한 참조를 업데이트했습니다. 그래도 ssl.CERT_REQUIRED 오류가 발생했습니다. –

+0

Dropbox SDK는'import ssl'을 수행하기 때문에'twisted.internet.ssl' 파일을 가져 오는 이유를 알 수 없습니다. 'PYTHONPATH' 환경 변수가 더 많이 포함하도록 설정되어 있지 않은지 확인하십시오. –

답변

1

이상합니다. Python 2.7 문서는 확실히 ssl.CERT_REQUIRED을 언급합니다.

당신이 잘못 무슨 일이 일어나고 있는지 알아내는 데 도움이 될 그

print dir(ssl) 
print ssl.__file__ 

에 추가, 바로 실패 라인 전에 SDK를 수정하려고합니다.

3

동일한 오류가 발생합니다. 나는 당신이 무엇을 제안했는데, 그것은 [, '로더'을 '문서'을 '패키지'을 '이름을'] SSL 모듈이 어떤 속성 '파일을'이없는, 오직이 밝혀 내가 dir (ssl)을 인쇄 할 때. 또한 주목할 가치가있는 것은 내가 google app 엔진에서 str (ssl)을 인쇄 할 때, 모듈 'ssl'(built-in) 이지만 명령 행에서 파이썬을 실행할 때 참조 할 수있다. 'ssl' '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.pyc' 이고 명령 줄의 ssl에는 파일 속성이 있습니다.

ssl이 도용당하는 방법을 잘 모르겠지만 ... 나는 꽤 확신합니다.

편집 : 로더이 0x1142684d0

편집에 google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook 개체입니다 : 여기에 관련된 문제가 발견 : SSLError on Google App Engine (local dev-server)