mirror of
				https://github.com/9001/copyparty.git
				synced 2025-11-03 21:43:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			106 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
import os
 | 
						|
import sys
 | 
						|
import time
 | 
						|
import json
 | 
						|
import threading
 | 
						|
import http.client
 | 
						|
 | 
						|
 | 
						|
class Conn(object):
 | 
						|
    def __init__(self, ip, port):
 | 
						|
        self.s = http.client.HTTPConnection(ip, port, timeout=260)
 | 
						|
        self.st = []
 | 
						|
 | 
						|
    def get(self, vpath):
 | 
						|
        self.st = [time.time()]
 | 
						|
 | 
						|
        self.s.request("GET", vpath)
 | 
						|
        self.st.append(time.time())
 | 
						|
 | 
						|
        ret = self.s.getresponse()
 | 
						|
        self.st.append(time.time())
 | 
						|
 | 
						|
        if ret.status < 200 or ret.status >= 400:
 | 
						|
            raise Exception(ret.status)
 | 
						|
 | 
						|
        ret = ret.read()
 | 
						|
        self.st.append(time.time())
 | 
						|
 | 
						|
        return ret
 | 
						|
 | 
						|
    def get_json(self, vpath):
 | 
						|
        ret = self.get(vpath)
 | 
						|
        return json.loads(ret)
 | 
						|
 | 
						|
 | 
						|
class CState(threading.Thread):
 | 
						|
    def __init__(self, cs):
 | 
						|
        threading.Thread.__init__(self)
 | 
						|
        self.daemon = True
 | 
						|
        self.cs = cs
 | 
						|
        self.start()
 | 
						|
 | 
						|
    def run(self):
 | 
						|
        colors = [5, 1, 3, 2, 7]
 | 
						|
        remotes = []
 | 
						|
        remotes_ok = False
 | 
						|
        while True:
 | 
						|
            time.sleep(0.001)
 | 
						|
            if not remotes_ok:
 | 
						|
                remotes = []
 | 
						|
                remotes_ok = True
 | 
						|
                for conn in self.cs:
 | 
						|
                    try:
 | 
						|
                        remotes.append(conn.s.sock.getsockname()[1])
 | 
						|
                    except:
 | 
						|
                        remotes.append("?")
 | 
						|
                        remotes_ok = False
 | 
						|
 | 
						|
            m = []
 | 
						|
            for conn, remote in zip(self.cs, remotes):
 | 
						|
                stage = len(conn.st)
 | 
						|
                m.append(f"\033[3{colors[stage]}m{remote}")
 | 
						|
 | 
						|
            m = " ".join(m)
 | 
						|
            print(f"{m}\033[0m\n\033[A", end="")
 | 
						|
 | 
						|
 | 
						|
def allget(cs, urls):
 | 
						|
    thrs = []
 | 
						|
    for c, url in zip(cs, urls):
 | 
						|
        t = threading.Thread(target=c.get, args=(url,))
 | 
						|
        t.start()
 | 
						|
        thrs.append(t)
 | 
						|
 | 
						|
    for t in thrs:
 | 
						|
        t.join()
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    os.system("")
 | 
						|
 | 
						|
    ip, port = sys.argv[1].split(":")
 | 
						|
    port = int(port)
 | 
						|
 | 
						|
    cs = []
 | 
						|
    for _ in range(64):
 | 
						|
        cs.append(Conn(ip, 3923))
 | 
						|
 | 
						|
    CState(cs)
 | 
						|
 | 
						|
    urlbase = "/doujin/c95"
 | 
						|
    j = cs[0].get_json(f"{urlbase}?ls")
 | 
						|
    urls = []
 | 
						|
    for d in j["dirs"]:
 | 
						|
        urls.append(f"{urlbase}/{d['href']}?th=w")
 | 
						|
 | 
						|
    for n in range(100):
 | 
						|
        print(n)
 | 
						|
        allget(cs, urls)
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    main()
 |