【问题标题】:Dropbox PLAINTEXT REST API on AppEngine DownloadErrorAppEngine DownloadError 上的 Dropbox PLAINTEXT REST API
【发布时间】:2014-04-01 05:00:35
【问题描述】:

我觉得我正在服用疯狂的药丸。我制作了一个小的 Dropbox API 应用:

  1. 使用 /diff API 获取 /Photos 列表
  2. 获取每张照片
  3. 解析 EXIF 数据
  4. 将 EXIF 数据存储回 appengine。

我写了它,它在 dev_appserver 上运行良好,但在部署到 appengine 时失败。

对 /delta 的调用正常工作,但对 /files 的调用失败并出现不透明的“DownloadError”。

无论如何,这是相关的代码块:

def fetch_image(self, path):
  url = 'https://api-content.dropbox.com/1/files/dropbox' + path
  try:
    result = urlfetch.fetch(
      url=url,
      method=urlfetch.GET,
      allow_truncated=True,
      headers={ 'Authorization': get_authorization_header(self.authorization) })
  except DownloadError, exception:
    logging.exception(exception)
    logging.debug(get_authorization_header(self.authorization))

def get_delta(self, cursor=None):
  url = 'https://api.dropbox.com/1/delta'
  params = {
    'path_prefix': '/Photos',
  }
  if cursor is not None:
    params['cursor'] = cursor
  result = urlfetch.fetch(
    url=url,
    method=urlfetch.POST,
    payload=urllib.urlencode(params),
    headers={ 'Authorization': get_authorization_header(self.authorization) })
  return json.loads(result.content)

get_authorization_header 产生如下输出:

OAuth oauth_version="1.0", oauth_signature_method="PLAINTEXT", oauth_consumer_key="<app-key>", oauth_token="<access-token>", oauth_signature="<app-secret>&<access-token-secret>"

一个示例堆栈跟踪显示似乎没有任何 error_detail。

无法获取 URL:https://api-content.dropbox.com/1/files/dropbox/Photos/**redacted** 回溯(最近一次通话最后): 文件“/base/data/home/apps/**redacted**”,第 295 行,在 update_image headers={ '授权': getAuthorizationHeader(self.authorization) }) 文件“/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/urlfetch.py​​”,第 270 行,在 fetch 返回 rpc.get_result() 文件“/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py”,第 612 行,在 get_result 返回 self.__get_result_hook(self) _get_fetch_result 中的文件“/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/urlfetch.py​​”,第 416 行 raise DownloadError("无法获取 URL:" + url + error_detail) 下载错误:无法获取 URL:https://api-content.dropbox.com/1/files/dropbox/Photos/**redacted**

我隐约怀疑这可能与 appengine 将授权标头修改为类似于 question 14716545 中发生的事情有关,因为它适用于 api 而不是 api-content,但我无法设置测试那还没有。即使是这样,我也无能为力。

【问题讨论】:

    标签: python google-app-engine oauth dropbox-api


    【解决方案1】:

    所以我想通了。基本上我没有正确编码请求 url。我得到了类似的东西:

    https://api-content.dropbox.com/1/files/dropbox/Photos/Some事件/一些文件名.jpg

    失败了,但是:

    https://api-content.dropbox.com/1/files/dropbox/Photos/Some%20Event/Some%20File%20Name.jpg

    有效!

    【讨论】:

      猜你喜欢
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      相关资源
      最近更新 更多