我正在尝试使用官方的Dropbox API python实现来进行范围下载。
我的请求看起来很好,因为我没有任何错误,但是当解析答案时,我收到此错误:
ERROR: [206] Error parsing response body or headers: Body - 'PK\x03\x04\x14\x00\x08\x00\x08\x00\xac\x82\xf4B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12 Headers - {'content-length': '25600001', 'accept-ranges': 'bytes', 'x-dropbox-metadata': '{"revision": 3, "rev": "31b5076b9", "thumb_exists": false, "bytes": 41349982, "modified": "Sat, 28 Dec 2013 00:48:54 +0000", "client_mtime": "Sat, 28 Dec 2013 00:48:54 +0000", "path": "/SUPERHOT-LINUX.zip", "is_dir": false, "icon": "page_white_compressed", "root": "dropbox", "mime_type": "application/zip", "size": "39.4 MB"}', 'x-server-response-time': '551', 'connection': 'keep-alive', 'server': 'nginx', 'content-range': 'bytes 0-25600000/41349982', 'etag': '3n', 'x-requestid': 'a55723c8c4bef7d24246a8047b76858f', 'x-dropbox-request-id': a781c2d352d3e15426cb9b3902325158', 'pragma': 'public', 'cache-control': 'max-age=0', 'date': 'Sat, 28 Dec 2013 03:12:17 GMT', 'content-type': 'application/zip'}
我的请求是使用以下方式构建的:
url, params, headers = self.client.request("/files/dropbox/"+fname, {}, method='GET', content_server=True)
headers['Range'] = 'bytes=' + str(startchunk)+"-"+str(endchunk)
f = self.client.rest_client.request("GET", url, headers=headers, raw_response=True)
你知道为什么我会收到这个错误吗?
提前谢谢
答案 0 :(得分:2)
我想你想raw_response=True
(不是False
)。我相信它设置为False
时,库会尝试将响应解析为JSON。
编辑:第二个答案更好,现在我已经尝试过了。 :-) raw_response
肯定应该是True
,但是库不处理HTTP状态代码206(部分内容)。我会在内部提交一个bug来解决这个问题,但是如果你想要一个快速的补丁,最新的(2.0.0)版本中的rest.py
的第226行现在应该是这样的:
if r.status != 200:
将其更改为:
if r.status != 200 and r.status != 206:
进行更改后,我可以运行与您的代码非常相似的代码并正确地返回文件的一部分。