-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgetAccessToken.py
120 lines (111 loc) · 4.31 KB
/
getAccessToken.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
from multiprocessing import Value
import requests
import json
import threading
from writeExcle import WriteAccessTokenToFile
from getFakeToken import shareToken
from queue import Queue
import config
import openpyxl
from remove_refresh_token import remove_refresh_token
import time
from getproxy import getProxy
def GetAccessToken(
username : str,
password : str,
cnt: Value
):
"""
函数:
输入: username 和 password, cnt计数器
返回:response
功能:获取token
"""
if username == None or password == None or username == "" or password == "":
return None
url = "https://ai.fakeopen.com/auth/login"
headers = {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Origin": "https://ai.fakeopen.com",
"Referer": "https://ai.fakeopen.com/auth1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.200",
"X-Requested-With": "XMLHttpRequest"
}
data = {
"username": username,
"password": password,
# "mfa_code": "",
}
for _ in range(3):
try:
response = requests.post(url, headers=headers, data=data,proxies=getProxy())
if response.status_code != 200:
print(f"账号{username}请求失败,状态码{response.status_code}, 返回值{response.json()}\n")
time.sleep(3)
break
except Exception as e:
print(f"账号{username}请求失败,错误信息{e}\n")
time.sleep(3)
continue
with cnt.get_lock():
cnt.value += 1
if response.status_code != 200:
print(f"{cnt.value}:账号{username}请求失败,状态码{response.status_code}, 返回值{response.json()}\n")
else:
print(f"{cnt.value}账号{username}:{200}\n")
return response
class GetAccessTokenThread(threading.Thread):
def __init__(
self,
lock: threading.Lock,
xlsxQueue: Queue,
AccessTokensWorksheet : openpyxl.worksheet.worksheet.Worksheet,
cnt: Value,
errorWorksheet
):
"""
继承: threading.Thread 多线程任务
参数: lock锁, xlseGenerator: 队列
AccessTokenWorksheet: 工作表对象
cnt: 计数器
"""
threading.Thread.__init__(self)
self.lock = lock
self.xlsxQueue = xlsxQueue
self.AccessTokensWorksheet = AccessTokensWorksheet
self.cnt = cnt
self.errorWorksheet = errorWorksheet
def run(self):
"""
参数: None
返回值:None
功能: 运行多线程, 从队列中获取账号密码, 通过GetAccessToken获取token, 将token获取fk,再写入文件中
"""
while not self.xlsxQueue.empty():
try:
self.lock.acquire()
if self.xlsxQueue.empty():
print("队列为空")
self.lock.release()
break
row =self.xlsxQueue.get() ##核心代码, 从队列中获取账号密码
self.lock.release()
username , password = row
response = GetAccessToken(username, password,self.cnt)
if response.status_code == 200:
fkresponse = shareToken(response.json()["access_token"],username)
if config.remove_refresh_token == True:
remove_refresh_token(response.json()["refresh_token"],config.remove_refresh_token_proxy_address)
else:
fkresponse =None
self.lock.acquire()
WriteAccessTokenToFile(username, password, response, self.AccessTokensWorksheet,fkresponse,self.errorWorksheet)
self.lock.release()
if(config.debug_mode==True and self.cnt.value >= 30):
break
# raise Exception("测试异常")
except Exception as e:
print(f"Get Access Token thread出现错误!,err:{e}")
WriteAccessTokenToFile(username, password, str(e), self.AccessTokensWorksheet,None,self.errorWorksheet)
continue
return