gpt4 book ai didi

google-app-engine - 从 GAE 将文件写入 Dropbox 帐户

转载 作者:太空宇宙 更新时间:2023-11-03 15:18:20 26 4
gpt4 key购买 nike

我正在尝试通过 GAE 应用程序在 Dropbox.com 文件夹中创建文件。我已经完成了注册 Dropbox 应用程序的所有步骤,并在我的开发机器上本地安装了来自 Dropbox 的 Python SDK。 (参见 dropbox.com API)。当我在本地计算机上使用 Dropbox SDK 中的 cli_client.py 测试脚本访问 Dropbox 时,一切都完美运行 - 可以“放置”文件等。

我现在想开始在 GAE 环境中工作,所以事情变得有点棘手。一些帮助会很有用。

对于那些熟悉 Dropbox API 代码的人来说,到目前为止我遇到了以下问题:

问题 1

rest.py Dropbox API 模块使用 pkg_resources 获取安装在本地机器安装的站点包中的证书。我换了

TRUSTED_CERT_FILE = pkg_resources.resource_filename(__name__, 'trusted-certs.crt')

TRUSTED_CERT_FILE = file('trusted-certs.crt')

并将证书文件放在我的 GAE 应用程序目录中。也许这不太对;在下面查看我的身份验证错误代码。

问题 2

session.py Dropbox API 模块使用 oauth 模块,因此我将 include 更改为 appengine oauth。

但是引发了一个异常,即 GAE 的 oauth 没有 Dropbox session.py 模块使用的 OAuthConsumer 方法。所以我下载了 oauth 1.0 并添加到我的应用程序中,现在导入它而不是 GAE oauth。

问题 3

GAE ssl 模块似乎没有 CERT_REQUIRED 属性。

这是一个常数,所以我改变了

self.cert_reqs = ssl.CERT_REQUIRED

self.cert_reqs = 2

调用时使用

ssl.wrap_socket(sock, cert_reqs=self.cert_reqs, ca_certs=self.ca_certs)

身份验证错误

但我仍然无法连接到 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')]

最佳答案

这是我的 Dropbox Python SDK 1.4 补丁版本,它适用于我的 Python 2.7 GAE:dropbox_python_sdk_gae_patched.7z.base64 .不需要额外的第三方库,只需要 GAE 环境提供的库。

只测试文件上传(put_file)。以下是设置步骤:

  1. 解压存档到 GAE 应用程序的根文件夹(如果主应用程序在根文件夹中)。您可以使用 Base64 Encoder/Decoder 解码 BASE64 : base64.exe -d dropbox_python_sdk_gae_patched.7z.base64 dropbox_python_sdk_gae_patched.7z
  2. 设置 APP_KEY、APP_SECRET、ACCESS_TYPE、ACCESS_TOKEN_KEY、ACCESS_TOKEN_SECRET。前三个是在 Dropbox 应用程序创建时配置的。最后两个是在授予应用程序访问特定保管箱帐户时获得的,您可以通过 cli_client.py(来自 DB Python SDK)从 token_store.txt 文件中获取它们。
  3. 在代码中这样使用:

    import dropbox
    # ...
    def DropboxUpload(path, data):
    sess = dropbox.session.DropboxSession(APP_KEY, APP_SECRET, ACCESS_TYPE)
    sess.set_token(ACCESS_TOKEN_KEY, ACCESS_TOKEN_SECRET)
    cli = dropbox.client.DropboxClient(sess)
    data_file = StringIO.StringIO(data)
    return cli.put_file(path, data_file)
    # ...
    import json
    class DropboxUploadHandlerExample(webapp2.RequestHandler):
    def get(self):
    url = "http://www.google.com/"
    result = urlfetch.fetch(url)
    self.response.headers['Content-Type'] = 'application/json'
    self.response.out.write(json.dumps(DropboxUpload('/fetch_result.dat', result.content)))

关于google-app-engine - 从 GAE 将文件写入 Dropbox 帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9350634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com