提交 e8368f66 编写于 作者: W wizardforcel

优化 cookie 机制

上级 f0fda014
......@@ -46,7 +46,7 @@ def login_handle(args):
if api.login(username=args.username, password=args.password):
api.get_user_info()
with open(os.path.join(bundle_dir, "cookies.json"), "w", encoding="utf-8") as f:
f.write(json.dumps(bilibili.get_cookies(), ensure_ascii=False, indent=2))
f.write(json.dumps(api.get_cookies(), ensure_ascii=False, indent=2))
def upload_handle(args):
def core(index, block):
......
......@@ -18,11 +18,12 @@ class Bilibili:
default_url = lambda self, sha1: f"http://i0.hdslb.com/bfs/album/{sha1}.png"
meta_string = lambda self, url: ("bdex://" + re.findall(r"[a-fA-F0-9]{40}", url)[0]) if re.match(r"^http(s?)://i0.hdslb.com/bfs/album/[a-fA-F0-9]{40}.png$", url) else url
get_cookies = lambda self: self._session.cookies.get_dict(domain=".bilibili.com")
get_uid = lambda self: self.get_cookies().get("DedeUserID", "")
def __init__(self):
self._session = requests.Session()
self._session.headers.update({'User-Agent': "Mozilla/5.0 BiliDroid/5.51.1 (bbcallen@gmail.com)"})
self.get_cookies = lambda: self._session.cookies.get_dict(domain=".bilibili.com")
self.get_uid = lambda: self.get_cookies().get("DedeUserID", "")
self.username = ""
self.password = ""
self.info = {
......@@ -62,29 +63,32 @@ class Bilibili:
sign_hash.update(f"{param}{salt}".encode())
return sign_hash.hexdigest()
def get_key(self):
url = f"https://passport.bilibili.com/api/oauth2/getKey"
payload = {
'appkey': Bilibili.app_key,
'sign': self.calc_sign(f"appkey={Bilibili.app_key}"),
}
while True:
res = request_retry("post", url, data=payload).json()
if res and res['code'] == 0:
return {
'key_hash': res['data']['hash'],
'pub_key': rsa.PublicKey.load_pkcs1_openssl_pem(res['data']['key'].encode()),
}
else:
time.sleep(1)
# 登录
def login(self, username, password):
def get_key():
url = f"https://passport.bilibili.com/api/oauth2/getKey"
payload = {
'appkey': Bilibili.app_key,
'sign': self.calc_sign(f"appkey={Bilibili.app_key}"),
}
while True:
response = self._requests("post", url, data=payload)
if response and response.get("code") == 0:
return {
'key_hash': response['data']['hash'],
'pub_key': rsa.PublicKey.load_pkcs1_openssl_pem(response['data']['key'].encode()),
}
else:
time.sleep(1)
self.username = username
self.password = password
while True:
key = get_key()
key = self.get_key()
key_hash, pub_key = key['key_hash'], key['pub_key']
url = f"https://passport.bilibili.com/api/v2/oauth2/login"
param = f"appkey={Bilibili.app_key}&password={parse.quote_plus(base64.b64encode(rsa.encrypt(f'{key_hash}{self.password}'.encode(), pub_key)))}&username={parse.quote_plus(self.username)}"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册