Skip to content

Commit e45fe80

Browse files
committed
fix(core): anti-crawler policy upgrade
1 parent 8dc28ba commit e45fe80

File tree

8 files changed

+32
-19
lines changed

8 files changed

+32
-19
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@
1212
> 🎙️ Teacher, leave those kids alone
1313
</details>
1414
15-
## [Core 的样例](./sample.py)
15+
## [Core 的使用样例](./sample.py)
1616

17-
只需要运行 `python3 sample.py` 它将会告诉你 Core 的运行方式。
17+
在终端环境中分别设置变量 `USERS``PASSWORD`
18+
后运行 `python3 sample.py` 它将会告诉你 Core 的运行方式。
1819

1920
## 使用方法
2021

sample.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import os
55
import json
66

7-
username = os.environ.get("USERNAME")
7+
username = os.environ.get("USERS")
88
password = os.environ.get("PASSWORD")
99

1010

src/api_url.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def info_api(self) -> str:
2020
)
2121

2222
def get_nonce_api(self):
23-
return f"http://www.cqooc.net/user/login?ts={self.__get_ts()}"
23+
return f"http://www.cqooc.com/user/login?ts={self.__get_ts()}"
2424

2525
def login_api(self, username: str, hash: str, nonce: str, cn: str) -> str:
2626
return (

src/core.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,38 @@ def __process_user_info(self) -> None:
2020
id_res = self.__request.do_get(
2121
self.__api_url.id_api(self.__user.get_xsid())
2222
)
23-
id_data = json.loads(id_res.text)
23+
id_data = id_res.json()
2424
self.__user.set_id(id_data["id"])
2525

2626
info_res = self.__request.do_get(self.__api_url.info_api())
27-
info_data = json.loads(info_res.text)
27+
info_data = info_res.json()
2828
self.__user.set_name(info_data["name"])
2929
self.__user.set_avatar(
3030
self.__request.get_host() + info_data["headimgurl"]
3131
)
3232

3333
def login(self) -> dict:
34-
nonce_res = self.__request.do_get(self.__api_url.get_nonce_api())
35-
data = json.loads(nonce_res.text)
34+
api = self.__api_url.get_nonce_api()
35+
nonce_res = self.__request.do_get(
36+
api,
37+
{
38+
"Referer": "http://www.cqooc.com/login",
39+
},
40+
)
41+
data = nonce_res.json()
3642
cn = test.cnonce()
3743
hash = test.getEncodePwd(
3844
data["nonce"] + test.getEncodePwd(self.__user.get_pwd()) + cn
3945
)
4046
login_res = self.__request.do_post(
4147
self.__api_url.login_api(
4248
self.__user.get_username(), hash, data["nonce"], cn
43-
)
49+
),
50+
headers={
51+
"Referer": "http://www.cqooc.com/login",
52+
},
4453
)
45-
data = json.loads(login_res.text)
54+
data = login_res.json()
4655
login_success = data["code"] == 0
4756
if login_success:
4857
self.__user.set_xsid(data["xsid"])
@@ -75,7 +84,7 @@ def get_course_lessons(self, course_id: str) -> dict:
7584
"Host": "www.cqooc.com",
7685
},
7786
)
78-
mcs_id_data = json.loads(mcs_id_res.text)
87+
mcs_id_data = mcs_id_res.json()
7988
self.__user.set_mcs_id(mcs_id_data["data"][0]["id"])
8089
lessons_res = self.__request.do_get(
8190
self.__api_url.lessons_api(course_id),
@@ -124,7 +133,7 @@ def skip_section(self, section_id: str) -> dict:
124133
"Host": "www.cqooc.com",
125134
},
126135
)
127-
status_code = json.loads(skip_res.text)["code"]
136+
status_code = skip_res.json()["code"]
128137
if status_code == 2:
129138
return Msg().processing("已经跳过该课程", 200)
130139
elif status_code == 0:

src/request.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ class Request:
88

99
def __init__(self):
1010
self.__headers = {
11-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
12-
+ " AppleWebKit/537.36 (KHTML, like Gecko) "
13-
+ "Chrome/79.0.3945.130 Safari/537.36",
11+
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
12+
+ " AppleWebKit/537.36 (KHTML, like Gecko)"
13+
+ " Chrome/101.0.0.0 Safari/537.36",
1414
}
1515
self.__proxies = {
1616
"http": "",

tests/test_api_url.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def test_info_api():
4040
def test_nonce_api():
4141
api_url = ApiUrl()
4242
assert api_url.get_nonce_api() == (
43-
"http://www.cqooc.net/user/login" + f"?ts={get_ts()}"
43+
"http://www.cqooc.com/user/login" + f"?ts={get_ts()}"
4444
)
4545

4646

tests/test_core.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66

77
# ROOT_PATH = os.path.dirname(os.path.dirname(__file__))
88

9-
username = os.environ.get("USERNAME")
9+
username = os.environ.get("USERS")
1010
password = os.environ.get("PASSWORD")
1111

1212

1313
def test_login_success():
14+
if (username is None) or (password is None):
15+
print("!!! 请设置环境变量:USERS 和 PASSWORD !!!")
1416
core = Core(username, password)
1517
res = core.login()
1618
assert res["code"] == 200

tests/test_request.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44

55

66
ua = (
7-
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit"
8-
+ "/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
7+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
8+
+ " AppleWebKit/537.36 (KHTML, like Gecko)"
9+
+ " Chrome/101.0.0.0 Safari/537.36"
910
)
1011

1112
proxies = {

0 commit comments

Comments
 (0)