1
+ from typing import Optional
1
2
from lib .logger import logger
2
3
from lib import requests
3
4
import execjs
25
26
"user-agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" ,
26
27
}
27
28
29
+ # 在程序启动时编译 JavaScript 代码
30
+ with open ('lib/js/xhs.js' , encoding = 'utf-8' ) as f :
31
+ xhs_sign_obj = execjs .compile (f .read ())
28
32
29
- async def common_request (uri : str , params : dict , headers : dict , need_sign : bool = True , post : bool = True ) -> tuple [dict , bool ]:
33
+
34
+ async def common_request (uri : str , params : dict , headers : dict , need_sign : bool = True , post : bool = True ) -> tuple [
35
+ dict , bool ]:
30
36
"""
31
37
请求 xhs
32
38
:param uri: 请求路径
@@ -36,13 +42,8 @@ async def common_request(uri: str, params: dict, headers: dict, need_sign: bool
36
42
"""
37
43
url = f'{ API_HOST } { uri } '
38
44
headers .update (COMMON_HEADERS )
39
-
40
45
if post :
41
- if need_sign :
42
- xhs_sign_obj = execjs .compile (open ('lib/js/xhs.js' , encoding = 'utf-8' ).read ())
43
- sign_header = xhs_sign_obj .call ('sign' , uri , params , headers .get ('cookie' , '' ))
44
- headers .update (sign_header )
45
-
46
+ sign_request (uri , params , headers , need_sign )
46
47
logger .info (f'url: { url } , request { url } , params={ params } , headers={ headers } ' )
47
48
body = json .dumps (params , separators = (',' , ':' ), ensure_ascii = False )
48
49
response = await requests .post (url , data = body , headers = headers )
@@ -53,11 +54,7 @@ async def common_request(uri: str, params: dict, headers: dict, need_sign: bool
53
54
uri = f'{ uri } ?{ params_str } '
54
55
url = f'{ url } ?{ params_str } '
55
56
56
- if need_sign :
57
- xhs_sign_obj = execjs .compile (open ('lib/js/xhs.js' , encoding = 'utf-8' ).read ())
58
- sign_header = xhs_sign_obj .call ('sign' , uri , None , headers .get ('cookie' , '' ))
59
- headers .update (sign_header )
60
-
57
+ sign_request (uri , None , headers , need_sign )
61
58
logger .info (f'url: { url } , request { url } , params={ params } , headers={ headers } ' )
62
59
response = await requests .get (url , headers = headers )
63
60
@@ -68,9 +65,24 @@ async def common_request(uri: str, params: dict, headers: dict, need_sign: bool
68
65
logger .error (
69
66
f'url: { url } , params: { params } , request error, code: { response .status_code } , body: { response .text } ' )
70
67
return {}, False
68
+
71
69
if response .json ().get ('code' , 0 ) != 0 :
72
70
logger .error (
73
71
f'url: { url } , params: { params } , request error, code: { response .status_code } , body: { response .text } ' )
74
72
return response .json (), False
75
73
76
- return response .json (), True
74
+ return response .json (), True
75
+
76
+
77
+ def sign_request (uri : str , params : Optional [dict ], headers : dict , need_sign : bool ) -> None :
78
+ """
79
+ 为请求添加签名
80
+ :param uri:
81
+ :param params:
82
+ :param headers:
83
+ :param need_sign:
84
+ :return:
85
+ """
86
+ if need_sign :
87
+ sign_header = xhs_sign_obj .call ('sign' , uri , params , headers .get ('cookie' , '' ))
88
+ headers .update (sign_header )
0 commit comments