本帖最后由 luoluoovo 于 2018-10-23 10:59 编辑
本来打算做一个百度云盘下载器的(突破上限的那种),事情太多还没做完
市面上的下载器应该也是获取真实地址再调用下载器进行突破的吧(个人见解)
有兴趣的同学可以来讨论一下,也可以用来二次开发自己的百度云盘下载器
把获取真实地址的方法发出来,网上有类似的js脚本,但是python写的还没见过
python版本是3.65
还有几个小问题没解决(偷懒)
1.同ip只能获取3次,多了需要验证码(这个可以用ORC识别去解决)
2.只能适用于公开类型(可以添加data解决)
源码:
[Python] 纯文本查看 复制代码 import re
import requests
import json
headers1={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'
}
def main(url):
headers = {
'Host': 'pan.baidu.com',
'Origin': 'https://pan.baidu.com',
'Referer': url,
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'
}
try:
response = requests.get(url, headers=headers1).content.decode('utf-8')
js = re.findall(r'<script type="text/javascript">(.*?)</script></html>', response, re.DOTALL)[0]
timestamp = re.findall(r'"timestamp":(.*?),', js, re.DOTALL)[0]
sign = re.findall(r'"sign":"(.*?)"', js, re.DOTALL)[0]
uk = re.findall(r'"uk":(.*?),', js, re.DOTALL)[0]
primaryid = re.findall(r'"shareid":(.*?),', js, re.DOTALL)[0]
fs_id = re.findall(r'"fs_id":(.*?),', js, re.DOTALL)[0]
app_id = re.findall(r'"app_id":"(.*?)"', js, re.DOTALL)[0]
data = {
'encrypt': '0',
'product': 'share',
'uk': str(uk),
'primaryid': str(primaryid),
'fid_list': "[" + fs_id + "]",
'path_list': ''
}
url1 = "https://pan.baidu.com/api/sharedownload?sign=" + sign + "×tamp=" + timestamp + "bdstoken=null" + "&channel=chunlei&clienttype=0&web=1" + "&app_id=" + str(
app_id)
post_down = requests.post(url=url1, headers=headers, data=data).text
post_down1 = json.loads(post_down)
dlink = ((post_down1["list"])[0])['dlink']
print(dlink)
except:
print("请求失败,请重新分享链接,确认本机IP未使用3次")
if __name__ == '__main__':
url=input("请输入分享链接(需公开类型,且本机IP未使用3次):")
main(url)
|