diff options
| author | alex <alex@pdp7.net> | 2026-03-22 17:58:57 +0100 |
|---|---|---|
| committer | alex <alex@pdp7.net> | 2026-03-22 17:58:57 +0100 |
| commit | 5a560cb4c986b70e54955587671807457bb61b84 (patch) | |
| tree | e98481339f2e75a143df9345d1fa92bdfee4abbd | |
| parent | 6a4135f7cbdae569441012f5796de98d2a9d9925 (diff) | |
Add gemget.py
| -rw-r--r-- | gemget.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/gemget.py b/gemget.py new file mode 100644 index 0000000..c7bde68 --- /dev/null +++ b/gemget.py @@ -0,0 +1,27 @@ +import socket +import ssl +import sys +import urllib.parse + +context = ssl.create_default_context() +context.check_hostname = False +context.verify_mode = ssl.CERT_NONE + +url = sys.argv[1] +split_url = urllib.parse.urlsplit(url) + +with socket.create_connection((split_url.netloc, 1965)) as sock: + with context.wrap_socket(sock, server_hostname=split_url.netloc) as ssock: + ssock.sendall(url.encode("ascii") + b"\r\n") + recv = b"" + while True: + chunk = ssock.recv() + if not chunk: + break + recv += chunk + +header, rest = recv.split(b"\r\n", 1) +header = header.decode("utf8") +assert header.startswith("2"), f"Response header {header} is not 2*" + +sys.stdout.buffer.write(rest) |
