import base64 import json import time import requests from crypto_plus import CryptoPlus from flask import Flask, request rsa = CryptoPlus.loads('''-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC72/8TD242+vn0FDQm8YyeY2WH rNIxpiCgGT6H5EbDgo7mAXy5+LtJ/imCrqfYli4mwW3SPagtGlTo1OrlqafX+pIs ehYnKuMQEW9nPbJ0z3ItrFx1cTC70Dx3mk6mrK+KOx6XgfiLqrgGy/wysbPX5PdN Apg4Wc3GsMk8UpdtGQIDAQAB -----END PUBLIC KEY-----''') def is_expired(access_token): if not access_token: return True try: message, signature = access_token.rsplit('.', 1) header, payload = message.split('.') payload = payload + '=' * - (len(payload) % - 4) signature = signature + '=' * - (len(signature) % - 4) exp = json.loads(base64.b64decode(payload).decode()).get('exp') return exp - time.time() < 10 or not rsa.verify(message.encode(), base64.urlsafe_b64decode(signature)) except: return True app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def download_url_form(): if request.method == 'POST': file_id = request.form['file_id'] access_token = request.form['access_token'] if is_expired(access_token): return 'token is expired', 401 drive_info = requests.post('https://bj29.api.aliyunpds.com/v2/drive/list_my_drives', json={ }, headers={ "Authorization": f"Bearer {access_token}", }).json() driver_id_map = {i['category']: i['drive_id'] for i in drive_info['items'] if i['category'] in ['backup', 'resource']} resp = requests.post('https://bj29.api.aliyunpds.com/v2/file/get_download_url', json={ 'drive_id': driver_id_map['resource'], 'file_id': file_id, 'expire_sec': 115200, }, headers={ 'Authorization': f'Bearer {access_token}', }) if resp.status_code == 404: resp = requests.post('https://bj29.api.aliyunpds.com/v2/file/get_download_url', json={ 'drive_id': driver_id_map['backup'], 'file_id': file_id, 'expire_sec': 115200, }, headers={ 'Authorization': f'Bearer {access_token}', }) if resp.status_code == 200: data = resp.json() url = data.get('cdn_url') if not url: url = data.get('url') return f'

Download URL:

{url}

' return f'

Error:

{resp.reason}

' # 如果是 GET 请求,渲染表单 return ''' Download URL Form

Download URL Form

''' if __name__ == '__main__': app.run('0.0.0.0',7860)