· 4 years ago · Mar 21, 2021, 02:56 AM
1import requests
2import os
3import time
4import re
5
6class DownLoadFile:
7 account = "LiLei"
8 passwd = "ILoveHanMeimei"
9 visit_url = "http://39.100.18.255:8001/msg.txt"
10
11 def _request(self, headers=None, need_auth=True):
12 auth = (self.account, self.passwd)
13 if need_auth is False:
14 auth = None
15 res = requests.get(self.visit_url, headers=headers, auth=auth, timeout=5)
16 if res.status_code != 200:
17 return False, "busybox request error"
18 else:
19 return True, res.content
20
21 def _download(self, content, save_path):
22 save_dir = os.path.dirname(save_path)
23 if not os.path.exists(save_dir):
24 os.makedirs(save_dir)
25 with open(save_path, "wb+") as f:
26 f.write(content)
27
28 def execute(self, save_path):
29 flag, res = self._request()
30 if flag:
31 self._download(res, save_path)
32 return flag, res
33
34class UploadFile:
35
36 username = "thorray"
37 password = "leidong1991."
38 login_url = "https://pastebin.com/login"
39 api_token_url = "https://pastebin.com/doc_api"
40 user_key_url = "https://pastebin.com/api/api_login.php"
41 create_paste_url = "https://pastebin.com/api/api_post.php"
42
43 headers = {
44 "content-type": "application/x-www-form-urlencoded",
45 'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
46 'cookie': "__cfduid=dffd596e096fdfaf938835c41adf002921616230516; cf_clearance=af4abcd542094034aecfca99fafe5cc6e7a00504-1616230539-0-150; _ga=GA1.2.929094597.1616230544; _gid=GA1.2.496419741.1616230544; _pbjs_userid_consent_data=3524755945110770; _pubcid=fe266483-0745-405f-90ad-d28756f42cf2; __gads=ID=41c80c2d772aa954:T=1616230881:S=ALNI_MZlRz3yv1TFYIHF2vEvwOcFtKqaZQ; l2c_1=true; _csrf-frontend=d5bbf111f9d85664d5c48aa6007488dc988c1058a54526443594c76f8fee9c4ba%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22cmQbsVI_MX-6ZzBI-6PKtFaWc5UgiVLi%22%3B%7D; sharedid=%7B%22id%22%3A%2201F15PA6FAA8CXQQWZMEAJ0SN9%22%2C%22ts%22%3A1616259148740%7D; __viCookieActive=true; pastebin-frontend=e9da9c0bb5cefc9d77d0cde856c944c4; _gat_gtag_UA_58643_34=1",
47 }
48 session = requests.Session()
49
50 def _get_csrf_token(self):
51 response = requests.get(self.login_url, headers=self.headers, timeout=5)
52 if response.status_code != 200:
53 print("csrf response fail, code", response.status_code)
54 return False
55
56 login_text = response.text
57 reg = '<meta name="csrf-token" content="(.*?)">'
58 tokens = re.findall(reg, login_text)
59
60 if tokens:
61 return tokens[0]
62 else:
63 return False
64
65 def _login(self):
66 csrf_token = self._get_csrf_token()
67 if csrf_token:
68 print("csrf token :", csrf_token)
69 data = {
70 "LoginForm[username]": self.username,
71 "LoginForm[password]": self.password,
72 "_csrf-frontend": csrf_token
73 }
74 response = self.session.post(self.login_url, data=data, headers=self.headers)
75 if response.status_code != 200:
76 return False, "login fail! {}".format(response.status_code)
77 else:
78 return True, ""
79 else:
80 return False, "csrf token not found !"
81
82 def _get_api_token(self):
83 response = self.session.get(self.api_token_url)
84 if response.status_code != 200:
85 print("api token fail, code", response.status_code)
86 return False
87
88 api_text = response.text
89 reg = '<div class="code_box">(.*?)</div>'
90 tokens = re.findall(reg, api_text)
91 if tokens:
92 return tokens[0]
93 else:
94 return None
95
96 def _get_api_user_key(self, api_token):
97 data = {
98 "api_user_name": self.username,
99 "api_user_password": self.password,
100 "api_dev_key": api_token
101 }
102 response = self.session.post(self.user_key_url, data=data, timeout=5)
103 if response.status_code != 200:
104 print("user key fail, code", response.status_code)
105 return False
106 user_key = response.text
107 print("user key: ", user_key)
108 return user_key
109
110 def _create_paste(self, content):
111 api_token = self._get_api_token()
112 user_key = self._get_api_user_key(api_token)
113 if api_token and user_key:
114 data = {
115 "api_option": "paste",
116 "api_dev_key": api_token,
117 "api_paste_code": content,
118 "api_user_key": user_key,
119 "api_paste_name": "msg.txt"
120 }
121 print("post data", data)
122 response = self.session.post(self.create_paste_url, data=data)
123 if response.status_code != 200:
124 return False, "create paste api error"
125 else:
126 return True, response.text
127 else:
128 return False, "token not found !"
129
130 def execute(self, save_path):
131 with open(save_path, "rb") as f:
132 content = f.read().decode("utf-8")
133 flag, msg = self._login()
134 if flag:
135 flag, msg = self._create_paste(content)
136
137 self.session.close()
138 return flag, msg
139
140class WorkTask:
141 @staticmethod
142 def as_execute(temp_file):
143 flag, msg = DownLoadFile().execute(temp_file)
144 if flag:
145 flag, msg = UploadFile().execute(temp_file)
146 if flag:
147 print("task flow done, url:", msg)
148 else:
149 print("Upload error:{}".format(msg))
150 else:
151 print("Download error:{}".format(msg))
152
153
154if __name__ == "__main__":
155 download_path = '/data/temp/msg.txt'
156 WorkTask.as_execute(download_path)
157