更新包管理的下载程序
This commit is contained in:
@@ -18,6 +18,224 @@ def prin(new_client_socket,data):
|
|||||||
httpserver = imp.load_source("server/main/httpserver.py","server/main/httpserver.py")
|
httpserver = imp.load_source("server/main/httpserver.py","server/main/httpserver.py")
|
||||||
httpserver.websockfs(new_client_socket,b'0' + data)
|
httpserver.websockfs(new_client_socket,b'0' + data)
|
||||||
|
|
||||||
|
def curl(rul,new_client_socket,file,datas,start,loop,stop):
|
||||||
|
tmp = rul.split('/')
|
||||||
|
tmpp = ''
|
||||||
|
if tmp[0] == 'http:':
|
||||||
|
tmpp = (tmp[2] + ':80').split(':')
|
||||||
|
else:
|
||||||
|
tmpp = (tmp[2] + ':443').split(':')
|
||||||
|
ruldir = "/".split('/')
|
||||||
|
ruldir[0] = tmp[0] + '//'
|
||||||
|
if len(tmpp) == 2:
|
||||||
|
ruldir[1] = rul[(len(ruldir[0] + tmpp[0])):]
|
||||||
|
else:
|
||||||
|
ruldir[1] = rul[(len(ruldir[0] + tmpp[0] + ':' + tmpp[1])):]
|
||||||
|
host = tmpp[0]
|
||||||
|
port = int(tmpp[1])
|
||||||
|
dir = ruldir[1]
|
||||||
|
|
||||||
|
socket.setdefaulttimeout(10)
|
||||||
|
client = socket.socket() #定义协议类型,相当于生命socket类型,同时生成socket连接对象
|
||||||
|
|
||||||
|
if ruldir[0] == "https://":
|
||||||
|
client = ssl.wrap_socket(client,cert_reqs=ssl.CERT_REQUIRED,ca_certs='server/main/DigiCert Global Root CA.crt')
|
||||||
|
fsdata = 'GET ' + dir + ' HTTP/1.1\r\n'
|
||||||
|
if ruldir[0] == "https://":
|
||||||
|
if port == 443:
|
||||||
|
fsdata = fsdata + 'Host: ' + host + '\r\n'
|
||||||
|
else:
|
||||||
|
fsdata = fsdata + 'Host: ' + host + ':' + str(port) + '\r\n'
|
||||||
|
else:
|
||||||
|
if port == 80:
|
||||||
|
fsdata = fsdata + 'Host: ' + host + '\r\n'
|
||||||
|
else:
|
||||||
|
fsdata = fsdata + 'Host: ' + host + ':' + str(port) + '\r\n'
|
||||||
|
fsdata = fsdata + 'Referer: ' + ruldir[0] + host + dir + '\r\n'
|
||||||
|
if os.path.exists(".config/main/cookie"):
|
||||||
|
fs = open(".config/main/cookie","rb")
|
||||||
|
for c in fs.read().decode("utf-8").split('\n'):
|
||||||
|
if c.split(':')[0] == host:
|
||||||
|
fsdata = fsdata + 'Cookie: ' + c.split(':')[1] + '\r\n'
|
||||||
|
|
||||||
|
client.connect((host,port))
|
||||||
|
client.send((fsdata + '\r\n').encode("utf-8"))
|
||||||
|
data = b''
|
||||||
|
|
||||||
|
lens = 0 #已经下载长度
|
||||||
|
lenmax = -1 #总长度
|
||||||
|
run = 0
|
||||||
|
hasattr = ""
|
||||||
|
fs = ''
|
||||||
|
while run == 0:
|
||||||
|
d = client.recv(10240000)
|
||||||
|
if d:
|
||||||
|
if hasattr == "":
|
||||||
|
data += d
|
||||||
|
hasattr = data.split(b'\r\n\r\n')
|
||||||
|
if len(hasattr) == 1:
|
||||||
|
hasattr = ""
|
||||||
|
else:
|
||||||
|
hasattr = hasattr[0]
|
||||||
|
hasattr = hasattr.split(b'\r\n')
|
||||||
|
for ddd in hasattr:
|
||||||
|
dddd = ddd.split(b': ')
|
||||||
|
if dddd[0] == b'Content-Length':
|
||||||
|
lenmax = int(dddd[1])
|
||||||
|
lens = len(data[len(data.split(b'\r\n\r\n')[0])+4:])
|
||||||
|
data = data[len(data.split(b'\r\n\r\n')[0])+4:]
|
||||||
|
datas = start(data,lens,lenmax,new_client_socket,datas,hasattr)
|
||||||
|
if hasattr[0].split(b" ")[1] == b"200":
|
||||||
|
if file != '':
|
||||||
|
fs = open(file,'wb')
|
||||||
|
fs.write(data)
|
||||||
|
if lenmax == 0:
|
||||||
|
run = 1
|
||||||
|
else:
|
||||||
|
lens += len(d)
|
||||||
|
if hasattr[0].split(b" ")[1] == b"200":
|
||||||
|
if fs == '':
|
||||||
|
data += d
|
||||||
|
else:
|
||||||
|
fs.write(d)
|
||||||
|
data = b""
|
||||||
|
else:
|
||||||
|
data += d
|
||||||
|
datas = loop(data,lens,lenmax,new_client_socket,datas,hasattr)
|
||||||
|
if lens == lenmax:
|
||||||
|
run = 1
|
||||||
|
fs.close()
|
||||||
|
datas = stop(data,lens,lenmax,new_client_socket,datas,hasattr)
|
||||||
|
else:
|
||||||
|
run = 1
|
||||||
|
return hasattr,data
|
||||||
|
|
||||||
|
def wget(rul,new_client_socket,file,datas,start,loop,stop):
|
||||||
|
hasattr,data = curl(rul,new_client_socket,file,datas,start,loop,stop)
|
||||||
|
cat = hasattr[0].split(b" ")[1].decode('utf-8')
|
||||||
|
prin = datas["prin"]
|
||||||
|
if cat == '301':
|
||||||
|
for d in hasattr:
|
||||||
|
dd = d.split(b': ')
|
||||||
|
if dd[0] == b'Location':
|
||||||
|
rul = d[len(dd[0] + b": "):].decode("utf-8")
|
||||||
|
prin(new_client_socket,(' 301\r\n').encode("utf-8"))
|
||||||
|
prin(new_client_socket,rul.encode("utf-8"))
|
||||||
|
hasattr,data = wget(rul,new_client_socket,file,datas,start,loop,stop)
|
||||||
|
elif cat == '302':
|
||||||
|
for d in hasattr:
|
||||||
|
dd = d.split(b': ')
|
||||||
|
if dd[0] == b'Location':
|
||||||
|
rul = d[len(dd[0] + b": "):].decode("utf-8")
|
||||||
|
prin(new_client_socket,(' 302\r\n ').encode("utf-8"))
|
||||||
|
prin(new_client_socket,rul.encode("utf-8"))
|
||||||
|
hasattr,data = wget(rul,new_client_socket,file,datas,start,loop,stop)
|
||||||
|
prin(new_client_socket,('\r\n').encode("utf-8"))
|
||||||
|
return hasattr,data
|
||||||
|
|
||||||
|
def bitto(size):
|
||||||
|
if size < 1024:
|
||||||
|
ramall = str(size)
|
||||||
|
ramall = ramall + "B"
|
||||||
|
elif size < (1024 * 1024):
|
||||||
|
ramall = str(size / 1024)
|
||||||
|
if len(ramall.split('.')) == 2:
|
||||||
|
if len(ramall.split('.')[1]) > 2:
|
||||||
|
ramall = ramall.split('.')[0] + '.' + ramall.split('.')[1][:2] + "KB"
|
||||||
|
else:
|
||||||
|
ramall = ramall + "KB"
|
||||||
|
else:
|
||||||
|
ramall = ramall + "KB"
|
||||||
|
elif size < (1024 * 1024 * 1024):
|
||||||
|
ramall = str(size / 1024 / 1024)
|
||||||
|
if len(ramall.split('.')) == 2:
|
||||||
|
if len(ramall.split('.')[1]) > 2:
|
||||||
|
ramall = ramall.split('.')[0] + '.' + ramall.split('.')[1][:2] + "MB"
|
||||||
|
else:
|
||||||
|
ramall = ramall + "MB"
|
||||||
|
else:
|
||||||
|
ramall = ramall + "MB"
|
||||||
|
elif size < (1024 * 1024 * 1024 * 1024):
|
||||||
|
ramall = str(size / 1024 / 1024 / 1024)
|
||||||
|
if len(ramall.split('.')) == 2:
|
||||||
|
if len(ramall.split('.')[1]) > 2:
|
||||||
|
ramall = ramall.split('.')[0] + '.' + ramall.split('.')[1][:2] + "GB"
|
||||||
|
else:
|
||||||
|
ramall = ramall + "GB"
|
||||||
|
else:
|
||||||
|
ramall = ramall + "GB"
|
||||||
|
return ramall
|
||||||
|
|
||||||
|
|
||||||
|
def start(data,lens,lenmax,new_client_socket,datas,hasattr):
|
||||||
|
#for d in hasattr:
|
||||||
|
# print(d)
|
||||||
|
datas["times"] = time.strftime("%S", time.localtime())
|
||||||
|
|
||||||
|
print("[" + str(lens) + " / " + str(lenmax) + "]\r",end="")
|
||||||
|
prin = datas["prin"]
|
||||||
|
datas["cdt"] = ""
|
||||||
|
|
||||||
|
datas["cdt"] = " ["
|
||||||
|
datas["cdt"] += bitto(lens)
|
||||||
|
datas["cdt"] += "/"
|
||||||
|
datas["cdt"] += bitto(lenmax)
|
||||||
|
datas["cdt"] += "] "
|
||||||
|
if lenmax == 0:
|
||||||
|
datas["cdt"] += ""
|
||||||
|
elif lenmax == -1:
|
||||||
|
datas["cdt"] += ""
|
||||||
|
else:
|
||||||
|
datas["cdt"] += '{:.2%}'.format(lens/lenmax)
|
||||||
|
prin(new_client_socket,(datas["cdt"]).encode("utf-8"))
|
||||||
|
return datas
|
||||||
|
def loop(data,lens,lenmax,new_client_socket,datas,hasattr):
|
||||||
|
print("[" + str(lens) + " / " + str(lenmax) + "]\r",end="")
|
||||||
|
|
||||||
|
if datas["times"] != time.strftime("%S", time.localtime()):
|
||||||
|
datas["times"] = time.strftime("%S", time.localtime())
|
||||||
|
|
||||||
|
jdcd = len(datas["cdt"])
|
||||||
|
while jdcd != 0:
|
||||||
|
prin(new_client_socket,('\b \b').encode("utf-8"))
|
||||||
|
jdcd = jdcd - 1
|
||||||
|
|
||||||
|
datas["cdt"] = " ["
|
||||||
|
datas["cdt"] += bitto(lens)
|
||||||
|
datas["cdt"] += "/"
|
||||||
|
datas["cdt"] += bitto(lenmax)
|
||||||
|
datas["cdt"] += "] "
|
||||||
|
if lenmax == 0:
|
||||||
|
datas["cdt"] += ""
|
||||||
|
elif lenmax == -1:
|
||||||
|
datas["cdt"] += ""
|
||||||
|
else:
|
||||||
|
datas["cdt"] += '{:.2%}'.format(lens/lenmax)
|
||||||
|
prin(new_client_socket,(datas["cdt"]).encode("utf-8"))
|
||||||
|
|
||||||
|
return datas
|
||||||
|
def end(data,lens,lenmax,new_client_socket,datas,hasattr):
|
||||||
|
print("[" + str(lens) + " / " + str(lenmax) + "]\r",end="")
|
||||||
|
|
||||||
|
jdcd = len(datas["cdt"])
|
||||||
|
while jdcd != 0:
|
||||||
|
prin(new_client_socket,('\b \b').encode("utf-8"))
|
||||||
|
jdcd = jdcd - 1
|
||||||
|
|
||||||
|
datas["cdt"] = " ["
|
||||||
|
datas["cdt"] += bitto(lens)
|
||||||
|
datas["cdt"] += "/"
|
||||||
|
datas["cdt"] += bitto(lenmax)
|
||||||
|
datas["cdt"] += "] "
|
||||||
|
if lenmax == 0:
|
||||||
|
datas["cdt"] += ""
|
||||||
|
elif lenmax == -1:
|
||||||
|
datas["cdt"] += ""
|
||||||
|
else:
|
||||||
|
datas["cdt"] += '{:.2%}'.format(lens/lenmax)
|
||||||
|
prin(new_client_socket,(datas["cdt"]).encode("utf-8"))
|
||||||
|
|
||||||
|
return datas
|
||||||
|
|
||||||
|
|
||||||
def main(new_client_socket,post,Versino,Headers,info,user):
|
def main(new_client_socket,post,Versino,Headers,info,user):
|
||||||
@@ -36,7 +254,91 @@ def main(new_client_socket,post,Versino,Headers,info,user):
|
|||||||
httpserver = imp.load_source("server/main/httpserver.py","server/main/httpserver.py")
|
httpserver = imp.load_source("server/main/httpserver.py","server/main/httpserver.py")
|
||||||
httpserver.websockend(new_client_socket,b"END\r\n")
|
httpserver.websockend(new_client_socket,b"END\r\n")
|
||||||
|
|
||||||
|
# 获取包地址
|
||||||
|
def catpkgrulinfo(posts):
|
||||||
|
res = {}
|
||||||
|
data = {}
|
||||||
|
yuan = os.listdir(".config/APP/data/")
|
||||||
|
yuan.sort(reverse=True)
|
||||||
|
for y in yuan:
|
||||||
|
fs = open(".config/APP/data/" + y,'rb')
|
||||||
|
yrul = fs.read().decode("utf-8").split('\n')[1:-1]
|
||||||
|
for i in yrul:
|
||||||
|
i = i.split(',')
|
||||||
|
for d in i:
|
||||||
|
if d != '\r':
|
||||||
|
d = d.split('"')
|
||||||
|
data[d[1]] = d[3]
|
||||||
|
if data["Package"] == posts[1]:
|
||||||
|
if len(posts) == 3:
|
||||||
|
if data["Version"] == posts[2]:
|
||||||
|
for d in i:
|
||||||
|
if d != '\r':
|
||||||
|
d = d.split('"')
|
||||||
|
res[d[1]] = d[3]
|
||||||
|
else:
|
||||||
|
if len(res) == 0:
|
||||||
|
for d in i:
|
||||||
|
if d != '\r':
|
||||||
|
d = d.split('"')
|
||||||
|
res[d[1]] = d[3]
|
||||||
|
else:
|
||||||
|
if float(data["Version"][1:]) > float(res["Version"][1:]):
|
||||||
|
for d in i:
|
||||||
|
if d != '\r':
|
||||||
|
d = d.split('"')
|
||||||
|
res[d[1]] = d[3]
|
||||||
|
return res
|
||||||
|
|
||||||
def install(new_client_socket,post,Versino,Headers,info):
|
def install(new_client_socket,post,Versino,Headers,info):
|
||||||
|
posts = post[2].split('=')
|
||||||
|
if posts[0] == 'bash':
|
||||||
|
posts = posts[1].split('_')
|
||||||
|
pkg = catpkgrulinfo(posts)
|
||||||
|
if len(pkg) == 0:
|
||||||
|
prin(new_client_socket,("Package not found").encode("utf-8"))
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
prin(new_client_socket,b'wget ')
|
||||||
|
rul = pkg["rul"] + "/" + pkg["file"]
|
||||||
|
prin(new_client_socket,rul.encode("utf-8"))
|
||||||
|
if os.path.exists(".tmp/APP/dl/" + rul.split('/')[-1]):
|
||||||
|
os.remove(".tmp/APP/dl/" + rul.split('/')[-1])
|
||||||
|
if os.path.exists(".tmp") == False:
|
||||||
|
os.mkdir(".tmp")
|
||||||
|
if os.path.exists(".tmp/APP") == False:
|
||||||
|
os.mkdir(".tmp/APP")
|
||||||
|
if os.path.exists(".tmp/APP/dl") == False:
|
||||||
|
os.mkdir(".tmp/APP/dl")
|
||||||
|
datas = {}
|
||||||
|
datas["prin"] = prin
|
||||||
|
hasattr,data = wget(rul,
|
||||||
|
new_client_socket,
|
||||||
|
".tmp/APP/dl/" + rul.split('/')[-1],
|
||||||
|
datas,
|
||||||
|
start,loop,end)
|
||||||
|
|
||||||
|
cat = hasattr[0].split(b" ")[1].decode('utf-8')
|
||||||
|
|
||||||
|
if cat == '200':
|
||||||
|
if os.path.exists(".out/" + rul.split('/')[-1]):
|
||||||
|
os.system("rm -rf .out/" + rul.split('/')[-1])
|
||||||
|
if not os.path.exists(".out"):
|
||||||
|
os.mkdir(".out")
|
||||||
|
os.mkdir(".out/" + rul.split('/')[-1])
|
||||||
|
sh = "tar xzf .tmp/APP/dl/" + rul.split('/')[-1] + " -C .out/" + rul.split('/')[-1]
|
||||||
|
os.system(sh)
|
||||||
|
sh = ".out/" + rul.split('/')[-1] + "/.out/server/" + posts[1] + "/Package.py"
|
||||||
|
sh = imp.load_source(sh,sh)
|
||||||
|
sh.install(new_client_socket,post,Versino,Headers,info,prin)
|
||||||
|
prin(new_client_socket,('').encode("utf-8"))
|
||||||
|
else:
|
||||||
|
prin(new_client_socket,(' \x1B[1;3;31mERROR: ' + cat.decode('utf-8') + '\x1B[0m\r\n').encode("utf-8"))
|
||||||
|
|
||||||
|
|
||||||
|
rull = ''
|
||||||
|
|
||||||
|
def installl(new_client_socket,post,Versino,Headers,info):
|
||||||
posts = post[2].split('=')
|
posts = post[2].split('=')
|
||||||
rull = ''
|
rull = ''
|
||||||
data = {}
|
data = {}
|
||||||
@@ -99,7 +401,17 @@ def install(new_client_socket,post,Versino,Headers,info):
|
|||||||
os.mkdir(".tmp/APP")
|
os.mkdir(".tmp/APP")
|
||||||
if os.path.exists(".tmp/APP/dl") == False:
|
if os.path.exists(".tmp/APP/dl") == False:
|
||||||
os.mkdir(".tmp/APP/dl")
|
os.mkdir(".tmp/APP/dl")
|
||||||
cat,cdata = Client(rul,prin,new_client_socket,".tmp/APP/dl/" + rul.split('/')[-1])
|
datas = {}
|
||||||
|
datas["prin"] = prin
|
||||||
|
hasattr,data = wget(rul,
|
||||||
|
new_client_socket,
|
||||||
|
".tmp/APP/dl/" + rul.split('/')[-1],
|
||||||
|
datas,
|
||||||
|
start,loop,end)
|
||||||
|
|
||||||
|
#cat,cdata = Client(rul,prin,new_client_socket,".tmp/APP/dl/" + rul.split('/')[-1])
|
||||||
|
cat = hasattr[0].split(b" ")[1].decode('utf-8')
|
||||||
|
|
||||||
prin(new_client_socket,b'\r\n')
|
prin(new_client_socket,b'\r\n')
|
||||||
if cat == '200':
|
if cat == '200':
|
||||||
#cdata = cdata.decode('utf-8')
|
#cdata = cdata.decode('utf-8')
|
||||||
@@ -120,9 +432,9 @@ def install(new_client_socket,post,Versino,Headers,info):
|
|||||||
#data = shrun.buffer.read().decode(encoding='utf8')
|
#data = shrun.buffer.read().decode(encoding='utf8')
|
||||||
prin(new_client_socket,('').encode("utf-8"))
|
prin(new_client_socket,('').encode("utf-8"))
|
||||||
else:
|
else:
|
||||||
prin(new_client_socket,(' \x1B[1;3;31mERROR: ' + cdata.decode('utf-8') + '\x1B[0m\r\n').encode("utf-8"))
|
prin(new_client_socket,(' \x1B[1;3;31mERROR: ' + cat.decode('utf-8') + '\x1B[0m\r\n').encode("utf-8"))
|
||||||
fs.close()
|
fs.close()
|
||||||
|
|
||||||
|
|
||||||
def Client(yyrul,prin,new_client_socket,file):
|
def Client(yyrul,prin,new_client_socket,file):
|
||||||
|
|
||||||
|
|||||||
@@ -22,5 +22,5 @@ def main(new_client_socket,RUL_CS,post_data,Headers,info,user):
|
|||||||
err = traceback.format_exc().split('\n')[:-1]
|
err = traceback.format_exc().split('\n')[:-1]
|
||||||
for ee in err:
|
for ee in err:
|
||||||
httpserver.websockfs(new_client_socket,('0' + ee + '\r\n').encode("utf-8"))
|
httpserver.websockfs(new_client_socket,('0' + ee + '\r\n').encode("utf-8"))
|
||||||
httpserver.websockend(new_client_socket,b"exit")
|
httpserver.websockend(new_client_socket,b"exit")
|
||||||
|
|
||||||
|
|||||||
152
test/wget.py
Normal file
152
test/wget.py
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
# coding=utf-8
|
||||||
|
#!/bin/python
|
||||||
|
|
||||||
|
#http 客户端测试
|
||||||
|
|
||||||
|
import os
|
||||||
|
import socket
|
||||||
|
import ssl
|
||||||
|
|
||||||
|
def prinout(new_client_socket,data):
|
||||||
|
print(data,end="")
|
||||||
|
|
||||||
|
def start(data,lens,lenmax,new_client_socket,datas,hasattr):
|
||||||
|
for d in hasattr:
|
||||||
|
print(d)
|
||||||
|
print("[" + str(lens) + " / " + str(lenmax) + "]\r",end="")
|
||||||
|
return datas
|
||||||
|
def loop(data,lens,lenmax,new_client_socket,datas):
|
||||||
|
print("[" + str(lens) + " / " + str(lenmax) + "]\r",end="")
|
||||||
|
return datas
|
||||||
|
|
||||||
|
def wget(rul,new_client_socket,file,datas,start,loop,stop):
|
||||||
|
tmp = rul.split('/')
|
||||||
|
tmpp = ''
|
||||||
|
if tmp[0] == 'http:':
|
||||||
|
tmpp = (tmp[2] + ':80').split(':')
|
||||||
|
else:
|
||||||
|
tmpp = (tmp[2] + ':443').split(':')
|
||||||
|
ruldir = "/".split('/')
|
||||||
|
ruldir[0] = tmp[0] + '//'
|
||||||
|
if len(tmpp) == 2:
|
||||||
|
ruldir[1] = rul[(len(ruldir[0] + tmpp[0])):]
|
||||||
|
else:
|
||||||
|
ruldir[1] = rul[(len(ruldir[0] + tmpp[0] + ':' + tmpp[1])):]
|
||||||
|
host = tmpp[0]
|
||||||
|
port = int(tmpp[1])
|
||||||
|
dir = ruldir[1]
|
||||||
|
|
||||||
|
socket.setdefaulttimeout(10)
|
||||||
|
client = socket.socket() #定义协议类型,相当于生命socket类型,同时生成socket连接对象
|
||||||
|
|
||||||
|
if ruldir[0] == "https://":
|
||||||
|
client = ssl.wrap_socket(client,cert_reqs=ssl.CERT_REQUIRED,ca_certs='server/main/DigiCert Global Root CA.crt')
|
||||||
|
fsdata = 'GET ' + dir + ' HTTP/1.1\r\n'
|
||||||
|
if ruldir[0] == "https://":
|
||||||
|
if port == 443:
|
||||||
|
fsdata = fsdata + 'Host: ' + host + '\r\n'
|
||||||
|
else:
|
||||||
|
fsdata = fsdata + 'Host: ' + host + ':' + str(port) + '\r\n'
|
||||||
|
else:
|
||||||
|
if port == 80:
|
||||||
|
fsdata = fsdata + 'Host: ' + host + '\r\n'
|
||||||
|
else:
|
||||||
|
fsdata = fsdata + 'Host: ' + host + ':' + str(port) + '\r\n'
|
||||||
|
fsdata = fsdata + 'Referer: ' + ruldir[0] + host + dir + '\r\n'
|
||||||
|
if os.path.exists(".config/main/cookie"):
|
||||||
|
fs = open(".config/main/cookie","rb")
|
||||||
|
for c in fs.read().decode("utf-8").split('\n'):
|
||||||
|
if c.split(':')[0] == host:
|
||||||
|
fsdata = fsdata + 'Cookie: ' + c.split(':')[1] + '\r\n'
|
||||||
|
|
||||||
|
client.connect((host,port))
|
||||||
|
client.send((fsdata + '\r\n').encode("utf-8"))
|
||||||
|
data = b''
|
||||||
|
|
||||||
|
lens = 0 #已经下载长度
|
||||||
|
lenmax = -1 #总长度
|
||||||
|
run = 0
|
||||||
|
hasattr = ""
|
||||||
|
fs = ''
|
||||||
|
while run == 0:
|
||||||
|
d = client.recv(10240000)
|
||||||
|
if d:
|
||||||
|
if hasattr == "":
|
||||||
|
data += d
|
||||||
|
hasattr = data.split(b'\r\n\r\n')
|
||||||
|
if len(hasattr) == 1:
|
||||||
|
hasattr = ""
|
||||||
|
else:
|
||||||
|
hasattr = hasattr[0]
|
||||||
|
hasattr = hasattr.split(b'\r\n')
|
||||||
|
for ddd in hasattr:
|
||||||
|
dddd = ddd.split(b': ')
|
||||||
|
if dddd[0] == b'Content-Length':
|
||||||
|
lenmax = int(dddd[1])
|
||||||
|
lens = len(data[len(data.split(b'\r\n\r\n')[0])+4:])
|
||||||
|
data = data[len(data.split(b'\r\n\r\n')[0])+4:]
|
||||||
|
datas = start(data,lens,lenmax,new_client_socket,datas,hasattr)
|
||||||
|
if hasattr[0].split(b" ")[1] == b"200":
|
||||||
|
if file != '':
|
||||||
|
fs = open(file,'wb')
|
||||||
|
fs.write(data)
|
||||||
|
if lenmax == 0:
|
||||||
|
run = 1
|
||||||
|
else:
|
||||||
|
lens += len(d)
|
||||||
|
if hasattr[0].split(b" ")[1] == b"200":
|
||||||
|
if fs == '':
|
||||||
|
data += d
|
||||||
|
else:
|
||||||
|
fs.write(d)
|
||||||
|
data = b""
|
||||||
|
else:
|
||||||
|
data += d
|
||||||
|
datas = loop(data,lens,lenmax,new_client_socket,datas,hasattr)
|
||||||
|
if lens == lenmax:
|
||||||
|
run = 1
|
||||||
|
fs.close()
|
||||||
|
datas = stop(data,lens,lenmax,new_client_socket,datas,hasattr)
|
||||||
|
else:
|
||||||
|
run = 1
|
||||||
|
return hasattr,data
|
||||||
|
hasattr = data.split(b'\r\n\r\n')
|
||||||
|
hasattr = hasattr[0]
|
||||||
|
hasattr = hasattr.split(b'\r\n')
|
||||||
|
if len(data.split(b'\r\n\r\n')) > 1:
|
||||||
|
for ddd in hasattr:
|
||||||
|
dddd = ddd.split(b': ')
|
||||||
|
if dddd[0] == b'Content-Length':
|
||||||
|
lenmax = int(dddd[1])
|
||||||
|
lens = len(data[len(data.split(b'\r\n\r\n')[0])+4:])
|
||||||
|
data = data[len(data.split(b'\r\n\r\n')[0])+4:]
|
||||||
|
datas = start(data,lens,lenmax,new_client_socket,datas,hasattr)
|
||||||
|
fs = ''
|
||||||
|
if hasattr[0].split(b" ")[1] == b"200":
|
||||||
|
if file != '':
|
||||||
|
fs = open(file,'wb')
|
||||||
|
fs.write(data)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
rul = "https://github.com/XiaoXianNv-boot/jcm/releases/download/pkg/frpc_V0.2.pkg"
|
||||||
|
print(rul)
|
||||||
|
hasattr,data = wget(rul,
|
||||||
|
"",
|
||||||
|
"tmp.tar.gz",
|
||||||
|
"",
|
||||||
|
start,loop)
|
||||||
|
if hasattr[0].split(b" ")[1] == b"302":
|
||||||
|
for d in hasattr:
|
||||||
|
dd = d.split(b': ')
|
||||||
|
if dd[0] == b'Location':
|
||||||
|
rul = d[len(dd[0] + b": "):].decode("utf-8")
|
||||||
|
print(rul)
|
||||||
|
hasattr,data = wget(rul,
|
||||||
|
"",
|
||||||
|
"tmp.tar.gz",
|
||||||
|
"",
|
||||||
|
start,loop)
|
||||||
|
|
||||||
Reference in New Issue
Block a user