【发布时间】:2014-04-01 05:00:35
【问题描述】:
我觉得我正在服用疯狂的药丸。我制作了一个小的 Dropbox API 应用:
- 使用 /diff API 获取 /Photos 列表
- 获取每张照片
- 解析 EXIF 数据
- 将 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