Tôi đang cố gắng tạo tệp trong thư mục Dropbox.com từ ứng dụng GAE. Tôi đã thực hiện tất cả các bước đăng ký một ứng dụng Dropbox và cài đặt Python SDK từ Dropbox cục bộ trên máy phát triển của tôi. (xem API dropbox.com). Tất cả hoạt động hoàn hảo khi tôi sử dụng kịch bản lệnh kiểm tra cli_client.py trong dropbox SDK trên máy cục bộ của tôi để truy cập dropbox - có thể 'đặt' các tệp, v.v.Ghi tệp vào tài khoản Dropbox từ GAE
Bây giờ tôi muốn bắt đầu làm việc trong môi trường GAE một chút khó khăn. Một số trợ giúp sẽ hữu ích.
Đối với những người quen thuộc với mã Dropbox API, tôi đã có những vấn đề sau vậy, đến nay:
Issue 1
Các rest.py Dropbox mô-đun API sử dụng pkg_resources để có được các Certs cài đặt trong trang web- các gói cài đặt máy cục bộ. tôi thay
TRUSTED_CERT_FILE = pkg_resources.resource_filename(__name__, 'trusted-certs.crt')
với
TRUSTED_CERT_FILE = file('trusted-certs.crt')
và đặt file cert trong thư mục ứng dụng GAE tôi. Có lẽ điều này không đúng; xem mã lỗi xác thực của tôi bên dưới.
Issue 2
Các session.py Dropbox mô-đun API sử dụng oauth mô-đun, vì vậy tôi đã thay đổi bao gồm để AppEngine oauth.
Nhưng đã nêu một ngoại lệ là oauth của GAE không có phương thức OAuthConsumer được mô-đun session.py của Dropbox sử dụng. Vì vậy, tôi đã tải xuống oauth 1.0 và được thêm vào ứng dụng của tôi, bây giờ, hãy nhập mã này thay vì GAE oauth.
Issue 3
GAE mô-đun ssl dường như không có tài sản CERT_REQUIRED.
Đây là một hằng số, vì vậy tôi đã thay đổi
self.cert_reqs = ssl.CERT_REQUIRED
để
self.cert_reqs = 2
này được sử dụng khi gọi
ssl.wrap_socket(sock, cert_reqs=self.cert_reqs, ca_certs=self.ca_certs)
Xác thực Lỗi
Nhưng tôi vẫn không thể kết nối với Dropbox:
Status: 401
Reason: Unauthorized
Body: {"error": "Authentication failed"}
Headers: [('date', 'Sun, 19 Feb 2012 15:11:12 GMT'), ('transfer-encoding', 'chunked'), ('connection', 'keep-alive'), ('content-type', 'application/json'), ('server', 'dbws')]
Tôi hy vọng ai đó trả lời này. Trong thời gian đó, trong khi tôi không chắc pkg_resources.resource_filename() là gì, tôi nghĩ nó trả về một tên tệp, không phải là một tệp mở, trong khi tệp() mở tệp có tên và trả về một đối tượng dòng (tệp mở). Thay vào đó, bạn có thể muốn thử 'TRUSTED_CERT_FILE = 'trust-certs.crt''. –
Cảm ơn Guido - sẽ thử rằng – erickCo
Guido, bạn đúng, kiểu được trả về bởi 'pkg_resources.resource_filename()' là 'str'. Giá trị là đường dẫn đầy đủ đến tệp certs. Vì vậy, tôi đã thực hiện thay đổi khi bạn đề xuất. Than ôi, vẫn còn lỗi tương tự. – erickCo