aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralex <alex@pdp7.net>2026-03-22 17:58:57 +0100
committeralex <alex@pdp7.net>2026-03-22 17:58:57 +0100
commit5a560cb4c986b70e54955587671807457bb61b84 (patch)
treee98481339f2e75a143df9345d1fa92bdfee4abbd
parent6a4135f7cbdae569441012f5796de98d2a9d9925 (diff)
Add gemget.py
-rw-r--r--gemget.py27
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)