某度云直链

第一步
更具分享链接获取文件列表
请求方式POST
请求url + 固定params默认参数
https://pan.baidu.com/share/wxlist?channel=weixin&version=2.2.2&clienttype=25&web=1&page=1&num=1000&order=time

请求头
headers: {
  'User-Agent': 'Mozilla/5.0 (Linux; Android 7.1.1; MI 6 Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/043807 Mobile Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/4G Language/zh_CN MicroMessenger/6.6.1.1220(0x26060135) NetType/4G Language/zh_CN miniProgram',
  'Cookie': this.svipCookie,
  'Referer': 'https://pan.baidu.com/disk/home',
}


params参数
params = {
  shorturl: surl,
  root: dir ? 0 : 1,
  ...(pwd ? { pwd } : null),
  ...(dir ? { dir } : null),
}
第二步获取sign和timestamp
请求方式GET
https://pan.baidu.com/share/tplconfig?fields=sign,timestamp&channel=chunlei&web=1&clienttype=0

headers: {
  'Cookie': 普通账户cookie,
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
  'Referer': 'https://pan.baidu.com/disk/home',
}

//url参数
params: {
  share_id: shareId,
  uk,
  surl,
  app_id: this.appid,
}


第三步获取下载直链
请求方式POST
https://pan.baidu.com/
/api/sharedownload?sign=${sign}&timestamp=${timestamp}&channel=chunlei&web=1&app_id${this.appid}&clienttype=0

请求头:
headers: {
   cookie: 普通账户cookie
}

请求体body参数 FormData表单形式提交
formData.append('encrypt', 0);
formData.append('extra', JSON.stringify({ sekey: seckey }));
formData.append('product', 'share');
formData.append('timestamp', timestamp);
vcode_input && formData.append('vcode_input', vcode_input);
vcode_str && formData.append('vcode_str', vcode_str);
formData.append('uk', uk);
formData.append('primaryid', shareId);
formData.append('fid_list', fidList);


vcode_input和vcode_str触发验证码则需要提交验证码参数

第四步获取真实下载地址
请求方式POST
请求url为第三步拿到的dlink参数

注意:请求时要替换头部url为 
https://d.pcs.baidu.com/file/${md5} 
替换成
https://d.pcs.baidu.com/rest/2.0/pcs/file

md5为第三步sharedownload返回的文件参数md5

请求参数:(待在url上)
除了上一步dlink携带的参数外,额外需要提交的params url参数为
app_id: '250528',
method: 'locatedownload',
check_blue: 1,
vip: 2,
version: '7.39.1.1',
channel: '00000000000000000000000000000000',
clienttype: 8,
ehps: 0,
dtype: 1,
ver: "4.0",
es: 1,
esl: 1,
devuid: 'BDIMXV2-O_0B5DF5389B5D4775946635E4E18D8314-C_0-D_5CDF_B803_70B0_42BC.-M_BCECA007D4F6-V_0D274B62',
rand: '85605dd38fed0309183c4db5fb362dfe5cbd553',
path: md5, //此md5为变量,在上面能拿到

注意:除了path其他都为常量固定
devuid和rand有待考察

成功可获取到直链地址
参数类型为数组
urls:[
  {
   dilnk:"http:..",
   rand:1
  },
  {
   dilnk:"http:..",
   rand:2
  },
  ...
]

请求方式GET
返回一堆链接筛选哪条可以下载 (一般只有1-3条链接可下载)
注意:
1.下载时在末尾拼接&origin=dlna
2.header带'User-Agent': 'netdisk;7.39.1.1;PC;PC-Windows;10.0.19045;WindowsBaiduYunGuanJia'

js代码实现逻辑可参考
const baseURL = dlink;
const serializeParams = (params) => {
  return Object.keys(params)
    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
    .join('&');
};
// Serialize the params and append to the baseURL
const urlParams = serializeParams(params);
const fullURL = (`${baseURL}&${urlParams}`).replace(`https://d.pcs.baidu.com/file/${md5}`, 'https://d.pcs.baidu.com/rest/2.0/pcs/file');

  let urls = [];
  const res = await lastValueFrom(
    this.httpService
      .post(
        fullURL,
        {},
        {
          headers: {
            'User-Agent': 'netdisk;7.39.1.1;PC;PC-Windows;10.0.19045;WindowsBaiduYunGuanJia',
            'cookie': this.svipCookie, //会员账号cookie
          },
        },
      ));
  const { data, data: { errno } } = res;
  console.log('data', data.urls);
  urls = data.urls.map((v) => ({
    ...v,
    url: `${v.url}`,
  }));
  
  //返回一堆链接筛选哪条可以下载 (一般只有1-3条链接可下载)
  for (let i = 0; i < urls.length; i++) {
    try {
      const resData = await lastValueFrom(
        this.httpService
          .get(
            urls[i].url.split('?')[0],
             {
              timeout: 1000 * 2,
             }),
      )
    } catch (e) {
      //如果错误异常error_msg字符产包含sign关键字则说明可下载
      if (e.response.data.error_msg.includes('sign')) {
        downloadLink = `${urls[i].url}&origin=dlna`;
        break;
      }
    }
  }

补充:第三步sharedownload接口需要图形验证码校验

获取dbstoken
请求方式GET
https://pan.baidu.com/api/gettemplatevariable?fields=[%22bdstoken%22]
headers :
{
  'cookie':普通账号cookie,
}

获取验证码返回前端
https://pan.baidu.com/api/getvcode?prod=pan&channel=chunlei&web=1&app_id=250528&clienttype=0&bdstoken=${tokenData.data.result.bdstoken}

获取第三步sharedownload接口需要的vcode_str
vcode_input字段为用户手动输入的图形验证码参数

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值