我正在使用以下代码读取作为API响应的数据块:
d = zlib.decompressobj(zlib.MAX_WBITS|16) # for gzip
for i in range(0, len(data), 4096):
chunk = data[i:i+4096]
# print(chunk)
str_chunk = d.decompress(chunk)
str_chunk = str_chunk.decode()
# print(str_chunk)
if '"@odata.nextLink"' in str_chunk:
ab = '{' + str_chunk[str_chunk.index('"@odata.nextLink"'):len(str_chunk)+1]
ab = ast.literal_eval(ab)
url = ab['@odata.nextLink']
return url
这种工作方式的一个例子是:
"@odata.nextLink":"someurl?$count=true
个
它在大多数情况下都可以工作,但有时这个键值对会被切断,并显示如下所示:
"@odata.nextLink":"someurl?$coun
个
我可以玩弄这行for i in range(0, len(data), 4096)
中的位数,但这并不能确保在某些情况下数据不会中断,因为页面大小(数据大小)对于每个页面大小可能是不同的.
我如何确保这个键值对永远不会被切断.还要注意,这个键值对是API响应的最后一行/最后一个键值对.
附注:我不能玩弄API请求参数.
我甚至试着倒着读,但这给出了标题不正确的问题:
for i in range(len(data), 0, -4096):
chunk = data[i -4096: i]
str_chunk = d.decompress(chunk)
str_chunk = str_chunk.decode()
if '"@odata.nextLink"' in str_chunk:
ab = '{' + str_chunk[str_chunk.index('"@odata.nextLink"'):len(str_chunk)+1]
ab = ast.literal_eval(ab)
url = ab['@odata.nextLink']
#print(url)
return url
上面的代码产生了以下错误,这真的很奇怪:
str_chunk = d.decompress(chunk)
zlib.error: Error -3 while decompressing data: incorrect header check