aboutsummaryrefslogtreecommitdiff
path: root/gemget.py
diff options
context:
space:
mode:
Diffstat (limited to '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)