秒传链接在可以预见的未来将会彻底失效
本想抽空写个简化版的秒传链接提取脚本自用,在我抓包百度网盘客户端的API请求后打消了这个念头。客户端已采用最新的precreate接口,目前可用的秒传链接提取脚本用的一般是随时可能被废弃的rapidupload接口。
最新的precreate「预上传」接口,新增了 block_list 这一必填参数,百度官方对其的描述为「文件各分片MD5数组的json串」。block_list的含义如下,如果上传的文件小于4MB,其md5值(32位小写)即为block_list字符串数组的唯一元素;如果上传的文件大于4MB,需要将上传的文件按照4MB大小在本地切分成分片,不足4MB的分片自动成为最后一个分片,所有分片的md5值(32位小写)组成的字符串数组即为block_list。
这一参数目前只在客户端启用,测试暂未发现启用了服务端验证,也就是目前该参数可以为任意字符串数组,但不能为空(数组长度不能为0,否则报错)。
换言之,百度网盘采取了类似阿里云盘的秒传策略:你本地必须拥有完整的文件才能实现秒传。跟阿里云盘不同的是,百度网盘的block_list是可计算的,你可以本地生成block_list,只不过相应的秒传提取码会变得异常长(300多M的文件生成的提取码长达3000+个字符),秒传链接提取已经毫无意义。
6.21更新:百度网盘文件上传分为三个阶段:预上传、分片上传、创建文件。只有完成这三步,才能将文件上传到网盘。
precreate「预上传」接口其实就是客户端的秒传接口,content-md5、slice-md5这两个参数变成了可选字段,如果没有提供,百度网盘就默认云端不存在此文件,直接跳过秒传,需要上传完整文件。
有意思的是,百度网盘web端上传也是走precreate接口,但并不携带content-md5、slice-md5参数,这就出现了「为什么客户端可以秒传而web端却需要完整上传 」的情况。
这一接口表明百度云存储是以4MB为单位分片存储的,完全有能力像阿里云盘那样采用秒传本地+云端的双向验证,一旦启用现阶段的秒传就会失效。
本想抽空写个简化版的秒传链接提取脚本自用,在我抓包百度网盘客户端的API请求后打消了这个念头。客户端已采用最新的precreate接口,目前可用的秒传链接提取脚本用的一般是随时可能被废弃的rapidupload接口。
最新的precreate「预上传」接口,新增了 block_list 这一必填参数,百度官方对其的描述为「文件各分片MD5数组的json串」。block_list的含义如下,如果上传的文件小于4MB,其md5值(32位小写)即为block_list字符串数组的唯一元素;如果上传的文件大于4MB,需要将上传的文件按照4MB大小在本地切分成分片,不足4MB的分片自动成为最后一个分片,所有分片的md5值(32位小写)组成的字符串数组即为block_list。
这一参数目前只在客户端启用,测试暂未发现启用了服务端验证,也就是目前该参数可以为任意字符串数组,但不能为空(数组长度不能为0,否则报错)。
换言之,百度网盘采取了类似阿里云盘的秒传策略:你本地必须拥有完整的文件才能实现秒传。跟阿里云盘不同的是,百度网盘的block_list是可计算的,你可以本地生成block_list,只不过相应的秒传提取码会变得异常长(300多M的文件生成的提取码长达3000+个字符),秒传链接提取已经毫无意义。
6.21更新:百度网盘文件上传分为三个阶段:预上传、分片上传、创建文件。只有完成这三步,才能将文件上传到网盘。
precreate「预上传」接口其实就是客户端的秒传接口,content-md5、slice-md5这两个参数变成了可选字段,如果没有提供,百度网盘就默认云端不存在此文件,直接跳过秒传,需要上传完整文件。
有意思的是,百度网盘web端上传也是走precreate接口,但并不携带content-md5、slice-md5参数,这就出现了「为什么客户端可以秒传而web端却需要完整上传 」的情况。
这一接口表明百度云存储是以4MB为单位分片存储的,完全有能力像阿里云盘那样采用秒传本地+云端的双向验证,一旦启用现阶段的秒传就会失效。